Avatar ·

async/await: wann Task und wann void in C# zurückgeben?

Hallo Kollegen! Ich habe mit dem asynchronen Programmieren in C# begonnen und bin auf ein Verständnisproblem gestoßen. Ich verwende .NET 4.5 und schreibe eine WPF-Anwendung. Wenn ich eine Methode mit dem Schlüsselwort async asynchron mache, verstehe ich nicht immer, welchen Rückgabetyp ich wählen soll: Task oder void? Zum Beispiel habe ich einen Button, der Daten lädt: ```csharp private async void Button_Click(object sender, RoutedEventArgs e) { await LoadDataAsync(); } ``` Es scheint zu funktionieren. Aber ich habe gesehen, dass in einigen Beispielen `async Task` statt `async void` geschrieben wird. Was ist der Unterschied? Und warum beschwert sich der Compiler manchmal, wenn ich versuche, eine `async void`-Methode zu erstellen, die kein Event-Handler ist? Außerdem habe ich versucht, eine Methode zu schreiben, die einfach wartet: ```csharp public async void WaitAndLog() { await Task.Delay(1000); Console.WriteLine("Done"); } ``` Ich rufe sie so auf: `WaitAndLog();` — und es funktioniert. Aber mir wurde gesagt, dass dies eine schlechte Praxis ist. Könnt ihr erklären, wann welche Variante verwendet werden soll? Und was...