对于我来说,这是一个相对常见的任务,而且我认为对于许多 .NET 程序员来说:
我想使用 .NET ThreadPool 来调度需要处理给定类型任务的工作线程。
作为复习,ThreadPool 的队列方法及其关联委托的签名是:
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
!
QueueUserWorkItem
.NET 团队选择不使方法(或整个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
}
}
我肯定错过了什么。