在多線程程式設計中,常見兩類場景極其耗費資源:一是線程長時間處於等待狀態,直到特定事件觸發才響應;二是線程週期性喚醒執行任務。針對前者,ThreadPool(線程池)是最佳解決方案;後者則適合使用 Timer(定時器)。
ThreadPool 類提供一個由系統維護的線程容器,需 Windows 2000 以上系統支援(因調用高版本 API)。它是靜態類,無需實例化,直接呼叫 ThreadPool.QueueUserWorkItem() 即可將工作項佇列化:
// 基礎簽名
public static bool QueueUserWorkItem(WaitCallback callback);
// 攜帶參數的重載
public static bool QueueUserWorkItem(WaitCallback callback, object state);
關鍵特性:
WaitCallback 委托方法傳入即可典型模式:主線程提交多個工作項至線程池,需等待全部完成才能繼續。此時 ManualResetEvent 充當「信號燈」:
new ManualResetEvent(false))WaitOne() 阻塞等待Set() 發出信號ManualResetEvent 關鍵方法:
Set():設為有信號(開綠燈)Reset():設為無信號(關紅燈)WaitOne():阻塞至有信號線程池適用於短時、高頻的背景任務。長時間運行或高優先級任務仍建議使用獨立線程(Thread 或 Task),避免佔用池資源導致其他工作項饑餓。