在IBackgroundTask中遇到HttpClient.GetAsync问题

时间:2016-07-05 19:01:55

标签: c# win-universal-app uwp

在单步执行调试器时,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应用程序

1 个答案:

答案 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

中阅读更多内容