核心需求:
僅示範核心邏略,不考慮效能優化(如延遲創建)與異常處理。
public class WorkItem
{
public WaitCallback Action { get; set; }
public object State { get; set; }
public WorkItem(WaitCallback action, object state)
{
this.Action = action;
this.State = state;
}
}
public class SimpleThreadPoolThread
{
private object locker = new object();
private AutoResetEvent are = new AutoResetEvent(false);
private WorkItem wi;
private Thread t;
private bool b = true;
private bool isWorking;
public bool IsWorking
{
get
{
lock (locker) { return isWorking; }
}
}
public event Action<SimpleThreadPoolThread> WorkComplete;
public SimpleThreadPoolThread()
{
lock (locker) { isWorking = false; }
t = new Thread(Work) { IsBackground = true };
t.Start();
}
public void SetWork(WorkItem wi) { this.wi = wi; }
public void StartWork() { are.Set(); } // 發出信號開始工作
public void StopWork()
{
wi = null; // 空任務
b = false; // 停止迴圈
are.Set(); // 釋放等待結束線程
}
private void Work()
{
while (b)
{
are.WaitOne(); // 無任務時等待
if (wi != null)
{
lock (locker) { isWorking = true; }
wi.Action(wi.State); // 執行任務
lock (locker) { isWorking = false; }
WorkComplete(this); // 觸發完成事件
}
}
}
}
此簡易線程池展示核心機制:背景線程 + AutoResetEvent 信號 + 工作項目隊列 + 完成事件通知。