私は次のコードを持っています:
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」を押すと、残りのすべてのメソッドを停止/強制終了したいと思います。