所以我正在编写一个应用程序,想要公开一系列具有同步和异步等效的方法。为此,我认为最简单的方法是编写异步方法中的逻辑,并将同步方法编写为包装器,同步等待它们传递结果。但代码不起作用。在以下代码示例中(不是我的真实代码,但是基本问题的减少),
Console.WriteLine(result)
行永远不会到达,前面的行会无限期地挂起。尽管如此,如果我将此模式几乎逐字复制到控制台应用程序中,则可以正常工作。
我做错了什么?这是否只是一种糟糕的模式,如果是,应该使用哪种模式?
public partial class MainWindow : Window {
public MainWindow() {
this.InitializeComponent();
var result = MyMethod(); //Never returns
Console.WriteLine(result);
}
public string MyMethod() {
return MyMethodAsync().Result; //Hangs here
}
public async Task<string> MyMethodAsync() { //Imagine the logic here is more complex
using (var cl = new HttpClient()) {
return await cl.GetStringAsync("http://www.google.co.uk/");
}
}
}