Heim > Backend-Entwicklung > C++ > Wie verwende ich Async mit ForEach in C# richtig?

Wie verwende ich Async mit ForEach in C# richtig?

Linda Hamilton
Freigeben: 2025-01-05 03:05:40
Original
666 Leute haben es durchsucht

How to Correctly Use Async with ForEach in C#?

Verwenden von Async mit ForEach in C#

Bei der Verwendung der ForEach-Methode mit asynchronen Vorgängen ist es wichtig, ihre Einschränkungen zu verstehen. In Ihrem Code:

db.Groups.ToList().ForEach(i => async {
    await GetAdminsFromGroup(i.Gid);
});
Nach dem Login kopieren

Der Compilerfehler „Der Name ‚Async‘ existiert im aktuellen Kontext nicht“ weist darauf hin, dass Sie async nicht direkt in einem nicht asynchronen Lambda-Ausdruck verwenden können.

Lösung:

Um dies zu umgehen, projizieren Sie jedes Element in einen asynchronen Vorgang und warten Sie darauf, dass alle Elemente ausgeführt werden vollständig:

using (DataContext db = new DataLayer.DataContext())
{
    var tasks = db.Groups.ToList().Select(i => GetAdminsFromGroupAsync(i.Gid));
    var results = await Task.WhenAll(tasks);
}
Nach dem Login kopieren

Vorteile dieses Ansatzes:

  • Richtige Fehlerbehandlung: Ausnahmen von async void können nicht abgefangen werden, aber Dieser Ansatz gibt sie in der Zeile „await Task.WhenAll“ weiter und ermöglicht so eine natürliche Ausnahme Verarbeitung.
  • Abschlussverfolgung: Dieser Ansatz zeigt deutlich an, wann die Vorgänge abgeschlossen sind, im Gegensatz zu async void, wodurch diese Unterscheidung schwer zu verfolgen ist.
  • Natürliche Syntax : GetAdminsFromGroupAsync impliziert, dass der Vorgang ein Ergebnis zurückgibt, wodurch der Code intuitiver und wartbarer wird.

Das obige ist der detaillierte Inhalt vonWie verwende ich Async mit ForEach in C# richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage