首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WaitCallback和QueueUserWorkItem

WaitCallback和QueueUserWorkItem
EN

Stack Overflow用户
提问于 2009-09-24 12:39:34
回答 2查看 1.9K关注 0票数 0

当我实现时

代码语言:javascript
复制
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)在队列中处理我的项目的时间是否不可预测?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-24 12:51:52

(1)是否意味着我的作业正在排队等待执行?

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

(2)是否会在队列中已存在的挂起项完成后进行处理?

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

(3)在队列中处理项目的时间是否不可预测?

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

票数 3
EN

Stack Overflow用户

发布于 2009-09-24 12:48:35

您的回调将基于CLR从其池中分配和启动线程所使用的算法在线程池线程上执行。

在您的示例中,回调将以一种看似确定的方式近乎即时地进行处理。但是,根据线程池的状态,这种情况很容易发生变化。如果您的进程已经用完了池中的所有线程,那么您的回调将不会执行,直到其他某个线程完成并可供其使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1471437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档