假设,我已经排队一个工作项目的一个 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队正在关闭
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top