對於我來說,這是一個相對常見的任務,我認爲,對於很多.NET程序員來說:我想使用.NET ThreadPool來調度需要處理給定類型的工作線程的ThreadPool任務。.NET中的通用線程池
先來回顧一下,對於線程池及其相關委託的排隊方法的簽名是:
public static bool QueueUserWorkItem (
WaitCallback callBack,
Object state
)
public delegate void WaitCallback (Object state)
因此,一個典型的通用工作線程類看起來是這樣的:
public class Worker<T> {
public void schedule(T i_task) {
ThreadPool.QueueUserWorkItem(execute, i_task)
}
private void execute(Object o){
T task = (T)o; //What happened to the type safety?
executeTask(task);
}
private void executeTask(T i_task){
//process i_task
}
}
注意state
參數的類型?這是Object
!
.NET團隊選擇不使QueueUserWorkItem
方法(或整個ThreadPool
類)具有通用性的原因是什麼?我不敢相信他們只是忽略了它。
這是我想怎麼看呢:
//in the ThreadPool class:
public static bool QueueUserWorkItem<T> (
WaitCallback<T> callBack,
T state
)
public delegate void WaitCallback<T> (T state)
這將使工人階級類型安全(和很多更清晰,恕我直言):
public class Worker<T> {
public void schedule(T i_task) {
ThreadPool.QueueUserWorkItem<T>(execute, i_task)
}
private void execute(T i_task){
//process i_task
}
}
我必須失去了一些東西。
我不明白你不使用線程池的工作隊列的基本「執行」層的說法。使用*時,這是一個問題。NET ThreadPool類由於線程數量有限嗎?海事組織很自然地假設工作隊列中的任務很短。你能否詳細說明一下? – 2008-11-27 15:52:30