Мы используем .Net 3.5 и C # SmartThreadPool от Ami Bar для управления несколькими рабочими элементами. Когда наше приложение закрывается, мы хотели бы «сообщить» всем рабочим элементам, что они должны попытаться завершить свою работу как можно скорее, затем дать им льготный период для завершения и затем убить те, которые еще работают. Наши рабочие элементы являются совместными, и они должны быть в состоянии проверить, было ли им «сказано» завершить работу и выйти из длительных циклов.
Это звучит как хорошая идея использовать workItemResult.Cancel (false), чтобы «сказать» рабочим элементам о завершении, а затем использовать SmartThreadPool.IsWorkItemCanceled внутри рабочих элементов, чтобы остановить их работу, но оказывается, что WaitAll не ждет ожидания Отмененные предметы и, следовательно, мы не можем заблокировать на льготный период.
Я начал играть с созданием WorkItemGroup для каждого рабочего элемента, вызвал Cancel (false) для рабочего элемента, а затем workItemGroup.WorkForIdle (gracePeriod), но хотел проверить, стоит ли это преследовать.
Буду признателен за любые мысли по этому поводу.
Спасибо