在逐步通过调试器时,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应用程序的
最佳答案
在后台任务中使用异步方法时,需要使用任务延迟,否则当执行流到达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中了解更多信息