我有了负责调用API来检索它需要更新自身数据的后台任务一个双赢RT应用程序。 不过,我碰到的一个问题; 当后台任务之外运行调用API请求完美的作品。 里面的后台任务的,它失败,也隐藏任何异常,可以帮助一点的问题。
我通过调试器跟踪这个问题跟踪问题点,并验证执行上GetAsync停止。 (我传递的URL是有效的,而URL中不到一秒钟的响应)
var client = new HttpClient("http://www.some-base-url.com/");
try
{
response = await client.GetAsync("valid-url");
// Never gets here
Debug.WriteLine("Done!");
}
catch (Exception exception)
{
// No exception is thrown, never gets here
Debug.WriteLine("Das Exception! " + exception);
}
我读过的所有文档中说,一个后台任务被允许,因为它需要有尽可能多的网络流量(节流当然)。 所以,我不明白为什么这会失败,或知道任何其他方式来诊断问题。 我在想什么?
UPDATE / ANSWER
感谢史蒂芬,他指明了方向的问题。 在确保定义的答案就在那里,利益在这里是后台任务前和修复程序后:
之前
public void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
Update();
deferral.Complete();
}
public async void Update()
{
...
}
后
public async void Run(IBackgroundTaskInstance taskInstance) // added 'async'
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
await Update(); // added 'await'
deferral.Complete();
}
public async Task Update() // 'void' changed to 'Task'
{
...
}