Async-Await与WP上的任务<t> .Result </t>

时间:2012-12-04 04:29:02

标签: c# httpwebrequest async-await windows-phone-8

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

以上代码适用于Windows 8和Windows应用商店,但是当我尝试在Windows Phone 8中运行它时,它不起作用。它只是冻结而且没有任何反应,看起来它需要永远运行任务。

我的目的是在不使用asycn和await方法的情况下调用Web服务同步。

2 个答案:

答案 0 :(得分:6)

  

我的目的是在不使用asycn和await方法的情况下调用Web服务同步。

你不应该这样做。 WP8 / Win8应该是异步的。 asyncawait使异步编程变得容易。

我有a blog post详细解释Result死锁情况(尽管我在这种情况下有点惊讶)。简而言之,async方法正在尝试在UI线程上恢复,但UI线程被阻塞,等待async方法完成。

为什么要同步?

答案 1 :(得分:5)

这应该发生。当您请求Result时,应用程序将停止并等待您实际获取结果。这意味着你要同步等待。

如果要异步等待,则必须使用 await 关键字,因为它的语义为:获得结果时,然后继续执行;在此期间,继续进行UI工作

这是wait(隐含同步)和异步等待(aka await)之间的区别。