WP8上的Async-Await vs Task <T> .Result

Ngh*_*yen 2 c# httpwebrequest async-await windows-phone-8

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

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

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

Ste*_*ary 6

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

你不应该这样做.WP8/Win8应该是异步的.async并且await使异步编程容易.

我有一篇博文,详细解释了Result死锁情况(尽管我在这种情况下有点惊讶).简而言之,该async方法试图在UI线程上继续,但阻止UI线程等待该async方法完成.

你为什么要同步?


Ton*_*ina 5

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

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

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