У меня есть что-то подобное в моем коде:
Parallel.ForEach(myList, new ParallelOptions { MaxDegreeOfParallelism = 4 }, item =>
{
Process(item);
});
Дело в том, что я делаю кучу вещей внутри метода Process()
(подключаюсь к общей папке, анализирую файл, сохраняю в БД и т. д.), и я беспокоюсь, что во время этого процесса что-то может пойти не так, и итерация никогда не завершится...< strong>Может ли это когда-нибудь произойти?
Есть ли способ установить тайм-аут для метода Process()
, чтобы избежать появления потоков-зомби?
ОБНОВЛЕНИЕ:
Самый простой способ, который я нашел для установки тайм-аута, — добавить миллисекунды к CancellationTokenSource
или вызвать метод Wait()
для задачи.
Опция 1
Parallel.ForEach(myList, new ParallelOptions { MaxDegreeOfParallelism = 4 }, item =>
{
var cts = new CancellationTokenSource(2000);
Task task = Task.Factory.StartNew(() => Process(item), cts.Token);
});
Вариант №2
Parallel.ForEach(myList, new ParallelOptions { MaxDegreeOfParallelism = 4 }, item =>
{
Task task = Task.Factory.StartNew(() => Process(item));
task.Wait(2000);
});
Проблема в том, что ни один из этих вариантов не может отменить метод Process()
. Нужно ли что-то проверять в методе Process()
?
Task.WaitAll
перегрузок с параметрами тайм-аута и токена отмены: docs.microsoft.com/en-us/dotnet/api/ - person Trass3r   schedule 12.01.2021