Mat*_*ttW 4 c# multithreading console-application
我有一个C#Windows服务启动各种对象(类库).这些对象中的每一个都有自己的"处理"逻辑,通过使用它来启动多个长时间运行的处理线程ThreadPool.我有一个例子,就像这样:
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(WorkerThread_Processing));
Run Code Online (Sandbox Code Playgroud)
这非常有效.我的应用程序没有任何问题,我的线程运行良好.
现在,对于回归测试,我启动了相同的对象,但是从C#Console应用程序而不是Windows服务.它调用相同的确切代码(因为它调用相同的对象),但是该WorkerThread_Processing方法在启动之前会延迟最多20秒.
我已经进入并从ThreadPoola 切换到a Thread,问题就消失了.这可能发生什么?我知道我没有超过MaxThreads计数(我最多开始20个线程).
Ada*_*son 15
该ThreadPool特别不打算长时间运行的项目(更具体地说,你甚至不需要启动新线程时使用ThreadPool,因为其目的是为了在线程的数量有限,传播的任务).
如果您的任务长时间运行,您应该将其分解为放在ThreadPool(或使用新Task框架)的逻辑部分,或者启动您自己的Thread对象.
至于为什么您遇到的延迟,将在MSDN文档ThreadPool类说以下内容:
作为其线程管理策略的一部分,线程池在创建线程之前会延迟.因此,当许多任务在短时间内排队时,在所有任务开始之前可能会有很长的延迟.
您只知道ThreadPool尚未达到其最大线程数,而不是它实际上处于空闲状态的线程数(如果有).
| 归档时间: |
|
| 查看次数: |
6406 次 |
| 最近记录: |