C# でスレッドが終了するのを待つ

Muhammad Maisam Abbas 2023年1月30日 2021年5月9日
  1. C# の Task.WaitAll() メソッドでスレッドが終了するのを待つ
  2. C# の Thread.Join() メソッドでスレッドが終了するのを待つ
C# でスレッドが終了するのを待つ

このチュートリアルでは、C# でスレッドの完了を待機する方法について説明します。

C# の Task.WaitAll() メソッドでスレッドが終了するのを待つ

C# の Task.WaitAll() メソッドは、Task クラスのすべてのオブジェクトの完了を待機するために使用されます。Task クラスは、C# の非同期タスクを表します。Task クラスでスレッドを開始し、C# の Task.WaitAll() メソッドでスレッドが終了するのを待つことができます。

using System;
using System.Threading.Tasks;

namespace wait_for_thread
{
    class Program
    {
        static void fun1()
        {
            for(int i = 0; i < 2; i++)
            {
                Console.WriteLine("Thread 1");
            }
        }
        static void fun2()
        {
            for (int i = 0; i < 2; i++)
            {
                Console.WriteLine("Thread 2");
            }
        }
        static void Main(string[] args)
        {
            Task thread1 = Task.Factory.StartNew(() => fun1());
            Task thread2 = Task.Factory.StartNew(() => fun2());
            Task.WaitAll(thread1, thread2);
            Console.WriteLine("The End");
        }
    }
}

出力:

Thread 1
Thread 1
Thread 2
Thread 2
The End

上記のコードでは、C# の Task.WaitAll() メソッドを使用して、メインスレッド内の thread1 タスクと thread2 タスクが完了するのを待ちました。

C# の Thread.Join() メソッドでスレッドが終了するのを待つ

上記のセクションでは、C# の Task.WaitAll() メソッドを使用してスレッドを待機する方法について説明しました。C# の Thread.Join() メソッドでも同じ目標を達成できます。Thread.Join() メソッドは、現在のスレッドが実行を完了するまで、呼び出し元のスレッドの実行を停止します。次のコード例は、C# の Thread.Join() メソッドを使用して、スレッドが実行を完了するのを待つ方法を示しています。

using System;
using System.Threading.Tasks;

namespace wait_for_thread
{
    class Program
    {
        static void fun1()
        {
            for(int i = 0; i < 2; i++)
            {
                Console.WriteLine("Thread 1");
            }
        }
        static void fun2()
        {
            for (int i = 0; i < 2; i++)
            {
                Console.WriteLine("Thread 2");
            }
        }
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(new ThreadStart(fun1));
            Thread thread2 = new Thread(new ThreadStart(fun2));
            
            thread1.Start();
            thread1.Join();
            thread2.Start();
            thread2.Join();
            Console.WriteLine("The End");
        }
    }
}

出力:

Thread 1
Thread 1
Thread 2
Thread 2
The End

上記のコードでは、C# の Thread.Join() メソッドを使用して、thread1 スレッドと thread2 スレッドがメインスレッド内で終了するのを待ちました。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

関連記事 - Csharp Thread