2
 var factory1 = new TaskFactory();
 var task1 =  factory1.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null).Result;

上面的代码在 windows 8 和 windows store 上运行,但是当我尝试在 windows phone 8 中运行它时,它不起作用。它只是冻结并且没有任何响应,看起来运行任务需要很长时间。

我的目的是同步调用 web 服务,而不使用 asycn 和 await 方法。

4

2 回答 2

6

我的目的是同步调用 web 服务,而不使用 asycn 和 await 方法。

你不应该那样做。WP8/Win8 应该是异步的。async并使await异步编程变得容易。

我有一篇博客文章详细解释了Result死锁情况(虽然我有点惊讶它在这种情况下发生)。简而言之,该async方法试图在 UI 线程上恢复,但 UI 线程被阻塞,等待该async方法完成。

为什么要同步?

于 2012-12-04T13:16:55.967 回答
5

这是应该发生的。当您请求 Result 时,应用程序将停止并等待,直到您真正得到结果。这意味着您同步等待。

如果你想异步等待,你必须使用await关键字,因为它的语义是:当你得到结果,然后继续执行;同时,继续进行UI工作

这就是等待(隐含同步)和异步等待(又名等待)之间的区别。

于 2012-12-04T07:26:55.087 回答