簡體   English   中英

在 c# 循環中運行 x 個線程

[英]Run x number of threads in c# loop

在控制台應用程序中,我為另一個循環中的每個循環並行運行,但我的一個更新可能需要 10 分鍾,而其余的只需要 1 秒。 這意味着 99 個已完成,但它會等待剩余的 1 個完成,然后才能運行下一批。

List<Items> myItems = GetItems();
while (myItems.Count > 0)
{
   ParallelOptions options = new ParallelOptions();
   options.MaxDegreeOfParallelism = 100;
   Parallel.ForEach(myItems, options, item => {
    CallUpdate(item.ID);
   });

   // Get some more records and loop
   myItems = GetItems()
}

有沒有更好的方法來做到這一點,以便在某些項目存在時始終可以運行 100 個線程?

您的描述非常適合生產者/消費者模式實現。 您可以使用BlockingCollection創建該模式的簡單實現

但是如果復雜性增加,那么像TPL這樣的東西可能是更好的選擇。 這是使用 TPL 的生產者/消費者示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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