我有以下代码:
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
包含很少的元素。当我按“c”时,所有Compute
方法都已启动。
当我按“c”时,不会引发异常。每个Compute
方法都会继续执行,直到正常结束。
Compute
当我按“c”时,我想停止/杀死所有剩余方法。