gpt4 book ai didi

c# - ActionBlock 与 Task.WhenAll

转载 作者:太空狗 更新时间:2023-10-30 01:01:43 28 4
gpt4 key购买 nike

我想知道并行执行多个异步方法的推荐方法是什么?

在 System.Threading.Tasks.Dataflow 中,我们可以指定最大并行度,但无界可能也是 Task.WhenAll 的默认设置?

这个:

var tasks = new List<Task>();
foreach(var item in items)
{
tasks.Add(myAsyncMethod(item));
}
await Task.WhenAll(tasks.ToArray());

或者那个:

var action = new ActionBlock<string>(myAsyncMethod, new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded,
BoundedCapacity = DataflowBlockOptions.Unbounded,
MaxMessagesPerTask = DataflowBlockOptions.Unbounded
});
foreach (var item in items) { }
{
action.Post(item);
}
action.Complete();

await action.Completion;

最佳答案

I would like to know what is the recommended way to execute multiple async methods in parallel?

旁注:实际上不是并行,而是并发

in System.Threading.Tasks.Dataflow we can specify the max degree of parallelism but unbounded is probably the default for Task.WhenAll too ?

正如有人评论的那样,Task.WhenAll 仅加入现有任务;当您的代码到达 Task.WhenAll 时,所有的并发决定都已经完成。

您可以使用 SemaphoreSlim 之类的东西来限制纯异步代码。

直接使用异步并发还是TPL Dataflow的决定取决于周围的代码。如果这个并发操作只被异步调用一次,那么异步并发是最好的选择;但如果此并发操作是您数据“管道”的一部分,那么 TPL 数据流可能更适合。

关于c# - ActionBlock<T> 与 Task.WhenAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37249738/

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