Я использую OmniThread Parallel.foreach()
. Бывают случаи, когда цикл занимает много времени или застревает.
Я хотел бы знать, возможно ли тайм-аут каждого процесса в цикле Parallel.foreach()
?
Я использую OmniThread Parallel.foreach()
. Бывают случаи, когда цикл занимает много времени или застревает.
Я хотел бы знать, возможно ли тайм-аут каждого процесса в цикле Parallel.foreach()
?
Короче: нет.
Если вы не запрограммируете обработку тайм-аута в своем коде «тела потока» (то, что вызывается при выполнении).
например, мой механизм базы данных позволяет отправлять вызов CancelProcessing
для выполнения запросов из другого потока, который выполняет запрос, это «чисто» завершит работающий подпоток.
'Грязный' конец подтем:
Я добавил FR на сайт Omnithread github, чтобы добавить (грязный) метод Terminate
к IOmniParallel
интерфейсы (и им подобные). Что имеет недостаток, потому что уничтожение подпотоков, вероятно, приведет к утечке памяти/ресурсов.
Тем временем вы можете использовать это грязное завершение работы solution/workaround, которое на самом деле устраняет аналогичную проблему (у меня был тупик в моей параллельной процедуре обработки , поэтому мой parallel.Waitfor
никогда не возвращал true, и, что еще хуже, моя переменная интерфейса IOmniParallelTask
никогда не освобождалась, что также приводило к блокировке вызывающего потока.