在单步执行调试器时,IBackgroundTask.Run()
方法会执行,但HttpClient().GetAsync()
永远不会返回或抛出异常。 (显然)如果我在前台方法中运行它,这个位没有任何问题。
public sealed class BackgroundHttpClientTest : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
var response = await new Windows.Web.Http.HttpClient().GetAsync(new Uri("https://www.someUrl.com"));
}
}
不确定我在这里失踪了什么。我仔细检查了所有的
在appmanifest中的声明,只是不知道在哪里看。 IBackgroundTask
是否存在一些我不知道的限制?
编辑:忘了提到这是适用于Win10 Universal应用程序
答案 0 :(得分:1)
在后台任务中使用异步方法时需要使用任务延迟,否则当执行流程到达Run
方法的末尾时,任务可能会意外终止。
public sealed class BackgroundHttpClientTest : IBackgroundTask
{
BackgroundTaskDeferral _deferral;
public async void Run(IBackgroundTaskInstance taskInstance)
{
_deferral = taskInstance.GetDeferral();
var response = await new Windows.Web.Http.HttpClient().GetAsync(new Uri("https://www.someUrl.com"));
_deferral.Complete();
}
}
在官方文档here
中阅读更多内容