При использовании Parallel.Invoke вы можете передать ParallelOptions, который включает в себя CancellationToken.Можно ли использовать этот токен в вызовах, чтобы определить, должен ли происходить выход?Следует ли использовать ссылку на CancellationTokenSource из действий?
CancellationTokenSource cts = new CancellationTokenSource();
ParallelOptions po = new ParallelOptions();
po.CancellationToken = cts.Token;
Parallel.Invoke(po,
new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine("Invoked Method 1"); }),
new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine("Invoked Method 2"); }),
new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine("Invoked Method 3"); cts.Cancel(); }),
new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine("Invoked Method 4"); }),
new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine("Invoked Method 5"); })
);
Обновление: отмена произошла слишком поздно.Я делал это вне вызванных методов.
Примечание. Если отмена произойдет достаточно скоро, Parallel.Invoke сгенерирует вызов, но в противном случае вызываемые методы завершатся без ошибок.