【发布时间】:2015-02-19 08:33:43
【问题描述】:
我创建了 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。 -
在这里调用
task.Wait();是多余的。task.Result将在必要时调用task.Wait()。
标签: c# wpf multithreading windows-phone-8 asynchronous