var factory1 = new TaskFactory();
var task1 = factory1.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null).Result;
上面的代码适用于Windows 8和Windows商店,但是当我尝试在Windows Phone 8中运行它时,它不起作用。它只是冻结并且没有响应任何内容,看起来运行任务需要很长时间。
我的目的是调用 Web 服务同步,而不使用 asycn 和 await 方法。
我的目的是调用 Web 服务同步,而不使用 asycn 和 await 方法。
你不应该那样做。WP8/Win8应该是异步的。 async
和await
使异步编程变得容易。
我有一篇博客文章详细解释了Result
死锁的情况(尽管我有点惊讶它在这种情况下发生)。简而言之,async
方法正在尝试在 UI 线程上恢复,但 UI 线程被阻止,等待async
方法完成。
为什么要同步?
这应该发生。当您请求结果时,应用程序将停止并等待,直到您实际获得结果。这意味着您同步等待。
如果要异步等待,则必须使用 await 关键字,因为它的语义是:当你得到结果时,然后继续执行;同时,继续进行 UI 工作。
这就是等待(隐含同步)和异步等待(又名等待)之间的区别。