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