Avatar ·

async/await: quando retornar Task e quando void em C#?

Olá, colegas! Comecei a estudar programação assíncrona em C# e me deparei com uma dúvida. Estou usando .NET 4.5 e escrevendo uma aplicação WPF. Quando torno um método assíncrono com a palavra-chave async, nem sempre entendo qual tipo de retorno escolher: Task ou void?\n\nPor exemplo, tenho um botão que carrega dados:\n\n```csharp\nprivate async void Button_Click(object sender, RoutedEventArgs e)\n{\n await LoadDataAsync();\n}\n```\n\nParece funcionar. Mas vi que em alguns exemplos escrevem `async Task` em vez de `async void`. Qual é a diferença? E por que o compilador às vezes reclama se tento criar um método `async void` que não seja um manipulador de evento?\n\nTambém tentei criar um método que apenas espera:\n\n```csharp\npublic async void WaitAndLog()\n{\n await Task.Delay(