我创建了一个Windows Phone 8.1项目,并且正在尝试在按钮单击时运行async
方法GetResponse<T>(string url)
,并等待该方法完成,但该方法从未完成。这是我的代码:
private void Button_Click(object sender, RoutedEventArgs
{
Task<List<MyObject>> task = GetResponse<MyObject>("my url");
task.Wait();
var items = task.Result; //break point here
}
public static async Task<List<T>> GetResponse<T>(string url)
{
List<T> items = null;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
var response = (HttpWebResponse)await Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null);
try
{
Stream stream = response.GetResponseStream();
StreamReader strReader = new StreamReader(stream);
string text = strReader.ReadToEnd();
items = JsonConvert.DeserializeObject<List<T>>(text);
}
catch (WebException)
{
throw;
}
return items;
}
它会卡在 task.Wait()
。
我把按钮点击方法改成了async
,并在async
方法前使用了await
,结果为(await GetResponse<string>("url")
)。但是Task<List<string>> task = GetResponse<string>("url")
有什么问题吗?
我做错了什么?
谢谢帮忙!
async
方法的后缀应该是Async
,也就是说你的方法名应该是GetResponseAsync
。 - defaulttask.Wait();
是多余的。当需要时,task.Result
已经会调用task.Wait()
。 - Peter Bruins