async/await: 何时返回 Task,何时返回 void?
大家好!我开始学习 C# 中的异步编程,遇到了一些困惑。我使用 .NET 4.5 编写 WPF 应用程序。当使用 async 关键字使方法异步时,我不太清楚应该选择哪种返回类型:Task 还是 void?
例如,我有一个加载数据的按钮:
```csharp
private async void Button_Click(object sender, RoutedEventArgs e)
{
await LoadDataAsync();
}
```
这似乎能工作。但我看到有些示例中写的是 `async Task` 而不是 `async void`。有什么区别?为什么当我尝试让一个不是事件处理程序的方法返回 `async void` 时,编译器有时会报错?
我还尝试了一个只是等待的方法:
```csharp
public async void WaitAndLog()
{
await Task.Delay(1000);
Console.WriteLine("Done");
}
```
这样调用它:`WaitAndLog();` —— 也能工作。但有人告诉我这是不好的实践。你能解释一下什么时候该用哪种选项吗?以及