溫馨提示×

線程池ThreadPool中QueueUserWorkItem怎么使用

小億
251
2023-11-15 13:15:17
欄目: 編程語言

QueueUserWorkItem 方法可以將工作項添加到線程池隊列中,并由線程池中的一個線程執(zhí)行。它接受一個 WaitCallback 委托作為參數(shù),該委托定義了要執(zhí)行的工作項的方法。

以下是使用 QueueUserWorkItem 方法的示例代碼:

using System;
using System.Threading;

public class Program
{
    public static void Main()
    {
        // 創(chuàng)建線程池
        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}");

        // 模擬工作項的執(zhí)行
        Thread.Sleep(1000);

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

在上面的示例中,我們首先使用 SetMinThreadsSetMaxThreads 方法設置線程池的最小和最大線程數(shù)。然后,我們使用 QueueUserWorkItem 方法將三個工作項添加到線程池隊列中。每個工作項都由線程池中的一個線程執(zhí)行,執(zhí)行的方法是 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

注意,線程池是一個共享資源,所以當其它代碼也在使用線程池時,線程池的實際行為可能會有所不同。

0