C#是否有可能中断的特定线内部的一个线程池?
-
19-09-2019 - |
题
假设,我已经排队一个工作项目的一个 ThreadPool
, 但工作项块,如果没有数据处理(阅读 BlockingQueue
).如果队列是空的,不会有更多的工作要入队列,然后,我必须呼叫的 Thread.Interrupt
方法如果我想要中断阻挡的任务,但是你怎么做同样的事情与 ThreadPool
?
代码可能是这样的:
void Run()
{
try
{
while(true)
{
blockingQueue.Dequeue();
doSomething();
}
}
finally
{
countDownLatch.Signal();
}
}
我知道的最好的事情要做,在这种情况是用一个规则 Thread
, 但是我想知道如果有一个 ThreadPool
等方式中断工作的项目。
解决方案
哪 BlockingQueue
是吗?那是一个BCL类?TPL类?或定义的?
没有问题;只是-我不会的。你的 可能 做的东西早在线程的生存线参考,但是我根本不会用 ThreadPool
对于这一工作,因为它听起来就像是再运行。一个规则 Thread
似乎更为合适。
我也感到惊讶的是,没有内置的方法告诉队列释放所有工人-我已经写了阻止队列前,我倾向于使用模式(例如, 从这里):
public bool TryDequeue(out T value) {...}
与此:
- 返回的真实立即如果有数据
- 阻塞和(最终)返回的真实的,如果没有数据,但一些加入
- 阻塞和(最终)returning false if队正在关闭
不隶属于 StackOverflow