我想知道什麼是並行執行多個異步方法的推薦方式?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。 –