0

当我实施

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) 处理队列中我的物品的时间是否不可预测?

4

2 回答 2

3

(1) 这是否意味着,我的工作排队到 CLR?

一旦池中的线程可用,它就会排队等待处理

(2) CLR 是否会在完成队列中现有的待处理项后对其进行处理?

可以同时执行多个作业...一旦其中一个池线程可用,它就用于处理队列中的下一项

(3) 处理队列中我的物品的时间是否不可预测?

不,至少不容易......您必须知道排队的作业需要多长时间才能执行,并跟踪每个作业以计算给定作业的执行时间。你为什么想知道呢?

于 2009-09-24T12:51:52.270 回答
2

您的回调将根据 CLR 用于从其池中分配和启动线程的任何算法在线程池线程上执行。

在您的示例中,回调将立即以看似确定的方式处理。但是,这很容易根据线程池的状态而改变。如果您的进程已用完池中的所有线程,那么您的回调将不会被执行,直到其他地方的线程完成并且可供它使用。

于 2009-09-24T12:48:35.087 回答