.net Core Parallel.ForEach Fragen

Ich habe bei einigen Projekten auf .net Core umgestellt und habe jetzt ein Problem mit Parallel.ForEach. In der Vergangenheit hatte ich oft eine Liste mit ID-Werten, die ich dann für Webanfragen verwendete, um die vollständigen Daten abzurufen. Es würde ungefähr so aussehen:

Parallel.ForEach(myList, l =>
{
    // make web request using l.id 
    // process the data somehow
});

Nun, in .net Core müssen alle Webanforderungen mit @ markiert seiawait was bedeutet, dass die Aktion Parallel.ForEach mit @ gekennzeichnet sein muasync. Indem Sie eine Parallel.ForEach-Aktion als @ markierasync bedeutet, wir haben einvoid async -Methode, die Probleme verursacht. In meinem speziellen Fall bedeutet dies, dass die Antwort an die Anwendung @ zurückgegeben wirVo Alle Webanforderungen in der parallelen Schleife sind abgeschlossen. Dies ist umständlich und führt zu Fehlern.

Frage: Was sind die Alternativen zur Verwendung von Parallel.ForEach hier?

Eine mögliche Lösung bestand darin, die Parallel-Schleife in eine Task einzubinden und auf die Task zu warten:

await Task.Run(() => Parallel.ForEach(myList, l =>
{
    // stuff here
}));

(hier gefunden: Parallel.ForEach vs Task.Run und Task.WhenAll)

Aber das funktioniert bei mir nicht. Wenn ich das verwende, kehre ich immer noch zur Anwendung zurück, bevor die Schleife abgeschlossen ist.

Andere Option

var tasks = new List<Task>();
foreach (var l in myList)
{
    tasks.Add(Task.Run(async () =>
    {
         // stuff here
    }));
}
await Task.WhenAll(tasks);

Dies scheint zu funktionieren, aber ist das die einzige Option? Es scheint, dass der neue .net Core Parallel.ForEach praktisch unbrauchbar gemacht hat (zumindest, wenn es um verschachtelte Web-Aufrufe geht).

Jede Hilfe / Beratung wird gebeten.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage