对于我来说,这是一个相对常见的任务,我认为,对于很多.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