我想知道什么是并行执行多个异步方法的推荐方式?ActionBlock <T> vs Task.WhenAll
在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;
'Parallel.ForEach()'? –
并行和异步混合不好,并且这些方法是异步的(我无法更改它们) –
您显示的'Task.WhenAll'代码与并行执行任务无关 - 任何有关使用例如线程池线程,并行等等,都发生在'myAsyncMethod'里面(大概是)返回热的Task。 –