Предположим, что я поставил в очередь рабочий элемент в ThreadPool
, но рабочий элемент блокирует, если нет данных для обработки (чтение из BlockingQueue
). Если очередь пуста и больше не будет работать в очереди, тогда я должен вызвать метод Thread.Interrupt
, если я хочу прервать задачу блокировки, но как сделать то же самое с ThreadPool
?C# Возможно ли прервать конкретный поток внутри ThreadPool?
код может выглядеть следующим образом:
void Run()
{
try
{
while(true)
{
blockingQueue.Dequeue();
doSomething();
}
}
finally
{
countDownLatch.Signal();
}
}
Я знаю, что лучше всего делать в этой ситуации использовать обычный Thread
, но мне интересно, если есть ThreadPool
эквивалентный способ прерывание рабочего элемента.
+1 TryDequeue - это очень хорошее решение проблемы. – Kiril
Энергонезависимая булева переменная (закрывающая), проверенная в коротком цикле, всегда ли работает? –
@nobugz - я * считаю, что 'Monitor.Wait' заставит обновление; интересный вопрос. –