gpt4 book ai didi

c# - 以并行和顺序方式执行 N 个线程

转载 作者:太空狗 更新时间:2023-10-29 17:44:31 25 4
gpt4 key购买 nike

我有一个应用程序,其中包含 1 个大文件的 1000 多个小部分。

我一次最多只能上传 16 个部分。

我用的是.Net的Thread并行库。

我使用 Parallel.For 分成多个部分并分配了 1 个应该为每个部分执行的方法并将 DegreeOfParallelism 设置为 16。

我需要使用由不同部分上传生成的校验和值执行 1 种方法,因此我必须设置某种机制,我必须等待所有部分上传完成,比如 1000。在 TPL 库中,我面临 1 个问题,它随机执行 1000 个中的 16 个线程中的任何一个。

我想要一些机制,如果第 1 个或第 2 个或 16 个线程中的任何一个完成了它的任务,接下来应该开始第 17 个部分,我可以使用它来运行前 16 个线程。

我怎样才能做到这一点?

enter image description here

最佳答案

一个可能的候选对象可以是 TPL Dataflow .这是一个接收整数流并将它们打印到控制台的演示。您将 MaxDegreeOfParallelism 设置为您希望并行旋转的任意多个线程:

void Main()
{
var actionBlock = new ActionBlock<int>(
i => Console.WriteLine(i),
new ExecutionDataflowBlockOptions {MaxDegreeOfParallelism = 16});

foreach (var i in Enumerable.Range(0, 200))
{
actionBlock.Post(i);
}
}

如果您想拥有多个生产者/消费者,这也可以很好地扩展。

关于c# - 以并行和顺序方式执行 N 个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33394310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com