【问题标题】:Xamarin Gcm Network Manager await httpclientXamarin Gcm 网络管理器等待 httpclient
【发布时间】:2017-10-12 14:55:56
【问题描述】:

我正在使用 Gcm 网络管理器来安排任务,在其中一项任务中我需要执行 HTTP 请求。到目前为止,它是用 HttpWebRequest 编写的,所以没有什么是异步的。

现在我想重用使用 HttpClient 编写的异步代码。

出现的问题是我无法使 OnRunTask() 异步,因为它需要返回一个 int:

例如

public override int OnRunTask(TaskParams @params)
{
    var result = await performSync();

    if(result)
    {
        return GcmNetworkManager.ResultSuccess;
    }

    return GcmNetworkManager.ResultReschedule;
}

我能做些什么才能在这里重用异步代码?

【问题讨论】:

    标签: c# asynchronous xamarin


    【解决方案1】:

    您可以像这样在 OnRunTask 方法中使用 Task.Run:

     Task.Run( async () =>
            {
                 // Do your stuff here
                 await asyncTask();
            });
    

    您无需使用此技术使 OnRunTask 异步

    希望对你有帮助

    编辑

    如果需要返回值匹配框架/库签名,也可以使用.Result

    例如

    var result = asyncTask().Result;
    ...
    

    【讨论】:

    • 任务的返回值如何?
    • @RVandersteen 您可以在任务运行之前创建一个局部变量,并在任务运行完成后返回它我认为
    • @RVandersteen 看看这篇文章,它可能对你有帮助:stackoverflow.com/questions/18050836/…
    • 哦,看来您可以使用 .Result 而不是等待,谢谢您的信息!
    • 编辑我的答案,如果您有更精确的内容可以添加它可以帮助其他人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多