在使用 Parallel.Invoke 时,您可以传递包含 cancelationToken 的 ParallelOptions。是否可以在调用中使用该标记来确定是否应退出?在操作内部应该使用 CancellationTokenSource 的引用吗?
更新:取消操作发生得太晚了。我是在调用方法外部执行取消操作的。
注意:如果取消操作足够及时,Parallel.Invoke会抛出异常,否则被调用的方法将无法正常退出。
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会抛出异常,否则被调用的方法将无法正常退出。