我正在尝试在WP上同步运行基于异步方法的任务。阅读here的代码后。我成功了,同步从系统库调用异步方法。
但是,每个API都没有任务基础异步方法,特别是在WP中,例如 WebRequest.BeginGetResponse 。所以我写了一个像:
的包装Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse,
request.EndGetResponse, null);
而且,具有讽刺意味的是,当我尝试从UI线程同步调用它时(一点点的停顿?我只是在做测试),我的程序在request.BeginGetResponse中卡住,从不继续。
但为什么呢?我使用相同的代码来调用系统api和我的方法。我的代码有什么问题吗?或其他什么?
非常感谢你的帮助!答案 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
” - 也就是说,将同步调用方法更改为异步。