繁体   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