Avatar ·

如何在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并尽量减少性能开销。