在逐步通过调试器时,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中了解更多信息

10-06 07:54