Como executar um método assíncrono Task<T> de forma síncrona em C#?
Olá a todos! Estou escrevendo um aplicativo de console em C# (.NET Framework 4.7.2) e encontrei um problema. Tenho um método assíncrono que retorna Task:
```csharp
public async Task GetDataAsync()
{
using (var client = new HttpClient())
{
var result = await client.GetStringAsync("https://api.example.com/data");
return result;
}
}
```
O problema é que estou chamando este método de um contexto síncrono, por exemplo, de um construtor de classe ou do método Main (que não é async). Não posso tornar o método chamador assíncrono, pois isso quebraria a arquitetura (por exemplo, um construtor não pode ser async).
Tentei diferentes abordagens:
- `GetDataAsync().Result` — o programa trava (deadlock).
- `GetDataAsync().GetAwaiter().GetResult()` — também trava.
- `Task.Run(() => GetDataAsync()).Result` — funciona, mas não tenho certeza se está correto.
Por favor, me digam como executar corretamente um método assíncrono de forma síncrona sem deadlocks e com o mínimo de problemas.