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