ForEach Async是否可以运行并发任务的数量限制?

时间:2017-05-14 09:15:10

标签: c# .net

是否有一个着名的,经过良好测试的nuget包,它将为我提供类似Parallel ForEach的功能,但是我可以限制同时运行的并发任务量?

我知道我可以自己写一个,所以不要求代码样本 - 只是询问是否有一个流行的 nuget包可以为我做。

谢谢!

1 个答案:

答案 0 :(得分:5)

这样的东西让你可以控制并行度:

var items = Enumerable.Range(0, 50);
var parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = 3 };
Parallel.ForEach(items, parallelOptions,
    i =>
    {
        Task.Delay(1000).GetAwaiter().GetResult(); // It's just an example 
        Console.WriteLine($"{DateTime.Now.ToLongTimeString()} I'm {i}");
    });

如果您将MaxDegreeOfParallelism置于1,您将看到每个项目都是按顺序处理的。

来自MSDN:MaxDegreeOfParallelism获取或设置此ParallelOptions实例启用的最大并发任务数。

Parallel.ForEach reference

ParallelOptions reference