スレッドプール ThreadPool での QueueUserWorkItem の使用方法

QueueUserWorkItem メソッドは、作業項目をスレッドプールのキューに追加し、スレッドプールのスレッドの 1 つによって実行されます。これは、実行する作業項目のメソッドを定義する WaitCallback 委任を受け取ります。

QueueUserWorkItem メソッドを使用するサンプル コードを示します。

using System;
using System.Threading;

public class Program
{
    public static void Main()
    {
        // 创建线程池
        ThreadPool.SetMinThreads(2, 2);
        ThreadPool.SetMaxThreads(10, 10);

        // 添加工作项到线程池队列中
        ThreadPool.QueueUserWorkItem(DoWork, "WorkItem 1");
        ThreadPool.QueueUserWorkItem(DoWork, "WorkItem 2");
        ThreadPool.QueueUserWorkItem(DoWork, "WorkItem 3");

        // 等待工作项完成
        Thread.Sleep(1000);
    }

    private static void DoWork(object workItem)
    {
        Console.WriteLine($"Executing work item: {workItem}");

        // 模拟工作项的执行
        Thread.Sleep(1000);

        Console.WriteLine($"Finished work item: {workItem}");
    }
}

上記のように、まず SetMinThreads と SetMaxThreads メソッドによりスレッドプールの最小、最大スレッド数を設定します。そして、QueueUserWorkItem メソッドにより 3 つの処理をスレッドプールのキューに追加します。各処理はスレッドプール内のスレッドにより実行され、実行メソッドは DoWork メソッドです。最後に、すべての処理が終わるまで Thread.Sleep メソッドにより待ち合わせを行います。

上のコードを実行すると、以下に示すような出力が表示されます。

Executing work item: WorkItem 1
Executing work item: WorkItem 2
Finished work item: WorkItem 1
Executing work item: WorkItem 3
Finished work item: WorkItem 2
Finished work item: WorkItem 3

スレッドプールは共有リソースのため、他のコードもスレッドプールを使用している場合は、スレッドプールの実際の動作が異なる場合があります。

bannerAds