当我实施
时WaitCallback waitCB = new WaitCallback(DisplayTime);
for (int i = 1; i <= 5; i++)
{
ThreadPool.QueueUserWorkItem(waitCB, null);
Thread.Sleep(2000);
}
public void DisplayTime(object state)
{
Console.WriteLine("Current Time {0} ", DateTime.Now);
}
(1)这是不是意味着,我的工作是排队到CLR?
(2)CLR在完成队列中现有的待处理项目后会处理吗?
(3)在队列中处理我的项目的时间是不可预测的?
答案 0 :(得分:3)
(1)这是不是意味着,我的工作是排队到CLR?
一旦来自池中的线程可用,它就排队等待处理
(2)CLR在完成队列中现有的待处理项目后会处理吗?
可以同时执行多个作业...只要其中一个池线程可用,就会用它来处理队列中的下一个项目
(3)在队列中处理我的项目的时间是不可预测的?
不,至少不容易......您必须知道排队的作业需要多长时间才能执行,并跟踪每个作业以计算给定作业的执行时间。你为什么还想知道呢?
答案 1 :(得分:2)
您的回调将基于CLR用于分配和启动其池中的线程的任何算法在线程池线程上执行。
在您的示例中,回调将立即以一种看似确定的方式处理。但是,根据线程池的状态,这很容易改变。如果你的进程耗尽了池中的所有线程,那么在其他地方的线程完成并可用之前,你的回调就不会被执行。