使用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會拋出,否則被調用的方法將會退出。
約翰,我就是這麼做的(雖然我的貼例如犯規表現出來),但所有的方法會繼續執行,直到完成。 –
@DustinDavis:你需要展示你是如何檢查取消的。一個完整的例子 - 以及發生的情況 - 將使診斷問題更容易。 –
我明白了。取消發生得太晚了。 –