[英]Aborting Parallel.Foreach
我正在使用Parallel.ForEach
實現並行性,我想知道有什么方法可以在任何一個請求完成后停止執行Parallel.ForEach
。 例如,考慮以下代碼:
IEnumerable<string> myList = new List<string>() { "admin", "admin2", "admin3" };
CancellationTokenSource _tokenSource = new CancellationTokenSource();
Parallel.ForEach(myList,
admin_name =>
{
Console.WriteLine(admin_name);
});
上面的代碼顯示admin
, admin2
和admin3
。 如果要打印任何管理員名稱,我想停止進一步執行。
這可以實現嗎? 還是有其他解決方法?
我願意提出建議和改進。
有過載Parallel.ForEach
它傳遞一個ParallelLoopState
到您的代理,這樣可以利用打出來的的Parallel.ForEach
,即:
Parallel.ForEach(myList, (admin_name, state) =>
{
Console.WriteLine(admin_name);
// Stop other iterations
state.Stop();
});
您需要記住的是,這將不是原子的,已經啟動的其他委托將繼續執行,除非他們明確檢查state.IsStopped
。
代替ParallelLoopState.Stop()
您可能希望使用ParallelLoopState.Break()
。
有關Stop()
和Break()
更多信息,請參見如何:從Parallel.For循環停止或中斷 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.