如何在C#中同步执行异步方法Task<T>?
大家好!我正在编写一个C#(.NET Framework 4.7.2)控制台应用程序,遇到了一个问题。我有一个异步方法,它返回Task:
```csharp
public async Task GetDataAsync()
{
using (var client = new HttpClient())
{
var result = await client.GetStringAsync("https://api.example.com/data");
return result;
}
}
```
问题在于,我在同步上下文中调用这个方法,例如从类的构造函数或Main方法(它本身不是async)中调用。我不能让调用方法变成异步,因为这会破坏架构(例如,构造函数不能是async)。
我尝试了不同的方法:
- `GetDataAsync().Result` — 程序挂起(deadlock)。
- `GetDataAsync().GetAwaiter().GetResult()` — 同样挂起。
- `Task.Run(() => GetDataAsync()).Result` — 可以工作,但我不确定这是否正确。
请告诉我如何正确同步执行异步方法,避免deadlock并尽量减少性能开销。