У меня есть следующий код:
CancellationTokenSource cts = new CancellationTokenSource();
ParallelOptions po = new ParallelOptions();
po.CancellationToken = cts.Token;
Task.Factory.StartNew(() =>
{
if (Console.ReadKey().KeyChar == 'c')
cts.Cancel();
Console.WriteLine("press any key to exit");
});
Parallel.ForEach(list, po, (algo) =>
{
algo.Compute(); // this compute lasts 1 minute
Console.WriteLine("this job is finished");
po.CancellationToken.ThrowIfCancellationRequested();
});
list
содержит несколько элементов. Все методы Compute
уже запущены, когда я нажимаю «c».
Когда я нажимаю «c», никаких исключений не возникает. Каждый Compute
метод продолжает свое выполнение до нормального завершения.
Я хотел бы остановить/убить все оставшиеся методы Compute
, когда я нажимаю "c".
Unit-Of-Work
вручную. Как только поток запущен, он сам по себе. Вам нужно бросить это из потока AFAIK. - person Elad Lachmi   schedule 20.03.2014algo.Compute()
и проверить его в цикле этого метода. - person Matthew Watson   schedule 20.03.2014ThrowIfCancellationRequested
где-нибудь в исходный код, ничего не произойдет. Эта строка также должна быть выполнена. - person usr   schedule 14.12.2015