複数の非同期メソッドを並行して実行するために推奨される方法は何ですか?ActionBlock <T>対Task.WhenAll
in 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'の内部でスレッドプールスレッド、並列処理などが発生しています。 –