当我实现时
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)在队列中处理我的项目的时间是否不可预测?
发布于 2009-09-24 12:51:52
(1)是否意味着我的作业正在排队等待执行?
一旦池中的线程可用,它就会被排队等待处理
(2)是否会在队列中已存在的挂起项完成后进行处理?
可以同时执行多个作业...一旦其中一个池线程可用,就会使用它来处理队列中的下一个项目
(3)在队列中处理项目的时间是否不可预测?
不,至少不容易..。您必须知道排队的作业需要多长时间才能执行,并跟踪每个作业以计算给定作业的执行时间。你怎么会想知道这些呢?
发布于 2009-09-24 12:48:35
您的回调将基于CLR从其池中分配和启动线程所使用的算法在线程池线程上执行。
在您的示例中,回调将以一种看似确定的方式近乎即时地进行处理。但是,根据线程池的状态,这种情况很容易发生变化。如果您的进程已经用完了池中的所有线程,那么您的回调将不会执行,直到其他某个线程完成并可供其使用。
https://stackoverflow.com/questions/1471437
复制相似问题