在WP8上同步运行基于任务的异步方法

时间:2013-12-09 05:50:05

标签: c# asynchronous windows-phone-8 task

我正在尝试在WP上同步运行基于异步方法的任务。阅读here的代码后。我成功了,同步从系统库调用异步方法

但是,每个API都没有任务基础异步方法,特别是在WP中,例如 WebRequest.BeginGetResponse 。所以我写了一个像:

的包装
Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, 
        request.EndGetResponse, null);

而且,具有讽刺意味的是,当我尝试从UI线程同步调用它时(一点点的停顿?我只是在做测试),我的程序在request.BeginGetResponse中卡住,从不继续。

但为什么呢?我使用相同的代码来调用系统api和我的方法。我的代码有什么问题吗?或其他什么?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您需要像这样调用Task.Start:

var requestTask = Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, 
      request.EndGetResponse, null);

如果你想让它同步(我轻轻地使用那个术语,因为它实际上并不是同步的)你可以等待任务。

Task.Wait(requestTask);

我还建议您考虑添加Async Nuget Package然后您可以异步并等待此任务。

答案 1 :(得分:1)

您可能正在进入deadlock situation I describe on my blog,其中async方法在UI线程被阻止时尝试在UI线程上恢复。

最好的解决方案是一直使用“async” - 也就是说,将同步调用方法更改为异步。