async/await: cuándo devolver Task y cuándo void en C#?
¡Hola, colegas! Empecé a estudiar programación asíncrona en C# y me encontré con una confusión. Uso .NET 4.5, escribo una aplicación WPF. Cuando hago un método asíncrono con la palabra clave async, no siempre entiendo qué tipo de retorno elegir: ¿Task o void?
Por ejemplo, tengo un botón que carga datos:
```csharp
private async void Button_Click(object sender, RoutedEventArgs e)
{
await LoadDataAsync();
}
```
Parece que funciona. Pero he visto que en algunos ejemplos escriben `async Task` en lugar de `async void`. ¿Cuál es la diferencia? ¿Y por qué el compilador a veces se queja si intento hacer un método `async void` que no es un manejador de eventos?
También probé hacer un método que simplemente espera:
```csharp
public async void WaitAndLog()
{
await Task.Delay(1000);
Console.WriteLine("Done");
}
```
Lo llamo así: `WaitAndLog();` — y funciona. Pero me dijeron que es una mala práctica. ¿Pueden explicarme cuándo usar cada opción? ¿Y qué...