Ich mag würde wissen, was der empfohlene Weg ist, mehrere asynchrone Methoden parallel auszuführen?ActionBlock <T> vs Task.WhenAll
in System.Threading.Tasks.Dataflow können wir den maximalen Grad der Parallelität angeben, aber unbegrenzt ist wahrscheinlich die Standardeinstellung für Task.WhenAll auch?
dies:
var tasks = new List<Task>();
foreach(var item in items)
{
tasks.Add(myAsyncMethod(item));
}
await Task.WhenAll(tasks.ToArray());
oder dass:
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()'? –
Parallel und async nicht so gut, und die Methoden sind async (ich kann sie nicht ändern) –
Der 'Task.WhenAll' Code, den Sie gezeigt haben, hat nichts mit der Ausführung von Aufgaben parallel zu tun - irgendwelche Entscheidungen über die Verwendung von z.B Thread-Pool-Threads, Parallelismus usw. passieren in 'myAsyncMethod', was (vermutlich) heiße' Task's zurückgibt. –