Avatar ·

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