Cómo ejecutar sincrónicamente un método asíncrono Task<T> en C#
¡Hola a todos! Estoy escribiendo una aplicación de consola en C# (.NET Framework 4.7.2) y me encontré con un problema. Tengo un método asíncrono que devuelve Task:
```csharp
public async Task GetDataAsync()
{
using (var client = new HttpClient())
{
var result = await client.GetStringAsync("https://api.example.com/data");
return result;
}
}
```
El problema es que llamo a este método desde un contexto síncrono, por ejemplo, desde el constructor de una clase o desde el método Main (que no es async). No puedo hacer que el método llamador sea asíncrono porque eso rompería la arquitectura (por ejemplo, un constructor no puede ser async).
He probado diferentes enfoques:
- `GetDataAsync().Result` — el programa se cuelga (deadlock).
- `GetDataAsync().GetAwaiter().GetResult()` — también se cuelga.
- `Task.Run(() => GetDataAsync()).Result` — funciona, pero no estoy seguro de que sea correcto.
Indíquenme cómo ejecutar sincrónicamente un método asíncrono sin deadlocks y con el mínimo riesgo.
No answers yet.
Inicia sesión para dejar una respuesta