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...