如何在C#中从同步方法调用异步方法?死锁与await问题
大家好!我是C#新手,正在尝试理解async/await。我有一个WinForms应用程序,使用了一个只提供异步方法的库(例如`HttpClient.SendAsync()`)。问题在于,我需要从同步方法中调用这个异步方法,而这个同步方法是从按钮点击事件调用的。我不能将整个方法改为异步,因为这会破坏程序其他部分的逻辑(例如从构造函数或属性中调用)。
以下是我的简化代码示例:
```csharp
public string GetData()
{
// 这是一个必须返回结果的同步方法
var client = new HttpClient();
var task = client.GetStringAsync("https://example.com");
task.Wait(); // 尝试等待结果
return task.Result; // 获取结果
}
```
但这会导致死锁(程序挂起)。我了解到这是由于同步上下文(SynchronizationContext)引起的,但我不明白如何正确解决。