Задать вопрос
@snovazabilparol
PHP是世界上最好的编程语言!当之无愧!

Каким костылем можно узнать что завершены/заснули все потоки ThreadPool?

Приветствую всех. Необходимо вызвать метод eventCompleted после завершения работы (засыпания) всех потоков из ThreadPool. У компонента "BackgroundWorker" есть на этот счет стандартный эвент, у пула такового нет (вероятно в следствии того что потоки не завершаются а засыпают). Поиски в сети ни к чему не привели, кроме того что "используй таски и треды", в моем случае нельзя терять обратную совместимость с устаревшими версиями фреймворка. Есть ли костыль/велосипед, который помог-бы решить сию проблему (while не в счет)?
  • Вопрос задан
  • 166 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 3
DarkRaven
@DarkRaven
разработка программного обеспечения
Если используете treadpool, то там скорее только через WaitHandle.WaitAll.
https://msdn.microsoft.com/en-us/library/z6w25xa6%...
Ответ написан
Комментировать
petermzg
@petermzg
Самый лучший программист
Так введите переменную счетчик, как запускаете задачу, то сразу Interlocked.Increment(ref counter); как завершаете, то Interlocked.Decrement(ref counter);. Достиг нуля значит надо вызвать eventCompleted
Ответ написан
Комментировать
@cicatrix
было бы большой ошибкой думать
Я обычно сохраняю ссылку на каждый экземпляр потока (объект Thread) в коллекции или массиве. Там можно проверять свойство IsAlive, ну и прибить тоже можно, если нужно (метод Abort() )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы