1. ホーム
  2. c#

複数のスレッドを作成し、すべてのスレッドが完了するのを待つ

2023-07-21 15:23:04

質問

複数のスレッドを作成し、すべてのスレッドが完了するのを待つにはどうしたらよいでしょうか。

どのように解決するのですか?

使用している.NET Frameworkのバージョンに依存します。.NET 4.0 では、Tasks を使用してスレッド管理が非常に簡単になりました。

class Program
{
    static void Main(string[] args)
    {
        Task task1 = Task.Factory.StartNew(() => doStuff());
        Task task2 = Task.Factory.StartNew(() => doStuff());
        Task task3 = Task.Factory.StartNew(() => doStuff());

        Task.WaitAll(task1, task2, task3);
                Console.WriteLine("All threads complete");
    }

    static void doStuff()
    {
        //do stuff here
    }
}

以前の.NETのバージョンでは BackgroundWorker オブジェクトを使用し ThreadPool.QueueUserWorkItem() を使うか、手動でスレッドを作成し Thread.Join() を使用して、それらが完了するのを待ちます。

static void Main(string[] args)
{
    Thread t1 = new Thread(doStuff);
    t1.Start();

    Thread t2 = new Thread(doStuff);
    t2.Start();

    Thread t3 = new Thread(doStuff);
    t3.Start();

    t1.Join();
    t2.Join();
    t3.Join();

    Console.WriteLine("All threads complete");
}