¿Cómo llamar a un método asincrónico desde uno sincrónico en C#? Problema con deadlock y await
¡Hola a todos! Soy nuevo en C# y estoy tratando de entender async/await. Tengo una aplicación WinForms y uso una librería que solo proporciona métodos asincrónicos (por ejemplo, `HttpClient.SendAsync()`). El problema es que necesito llamar a este método asincrónico desde un método sincrónico que se invoca desde el evento de un botón (button click). No puedo hacer que todo el método sea asincrónico porque eso rompe la lógica de otras partes del programa (por ejemplo, llamadas desde el constructor o desde una propiedad).
Aquí hay un ejemplo simplificado de mi código:
```csharp
public string GetData()
{
// Este es un método sincrónico que debe devolver un resultado
var client = new HttpClient();
var task = client.GetStringAsync("https://example.com");
task.Wait(); // Intento esperar el resultado
return task.Result; // Obtengo el resultado
}
```
Pero esto provoca un deadlock (congelamiento del programa). He leído que esto se debe al contexto de sincronización (SynchronizationContext), pero no entiendo cómo solucionarlo correctamente.