簡體   English   中英

中止並行

[英]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);
    });

上面的代碼顯示adminadmin2admin3 如果要打印任何管理員名稱,我想停止進一步執行。

這可以實現嗎? 還是有其他解決方法?

我願意提出建議和改進。

有過載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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM