【问题标题】:Trouble with HttpClient.GetAsync in IBackgroundTaskIBackgroundTask 中的 HttpClient.GetAsync 出现问题
【发布时间】:2016-07-06 04:01:04
【问题描述】:

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

【问题讨论】:

    标签: c# win-universal-app uwp


    【解决方案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

    【讨论】:

    • 你需要把_deferral = taskInstance.GetDeferral();放在Run方法里面,否则taskInstance没有定义。
    • 当您没有从可以正确编写代码的开发机器上回复时,就会发生这种情况。在run外面声明_deferral,在run里面初始化。
    • 你愿意帮助我吗,伙计stackoverflow.com/questions/54759390/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2019-05-05
    • 2011-09-23
    • 2020-08-23
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多