Xamarin Gcm网络管理器等待httpclient

时间:2017-10-12 14:55:57

标签: c# asynchronous xamarin

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

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

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

e.g。

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

    if(result)
    {
        return GcmNetworkManager.ResultSuccess;
    }

    return GcmNetworkManager.ResultReschedule;
}

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

1 个答案:

答案 0 :(得分:2)

您可以在OnRunTask方法中使用Task.Run,​​如下所示:

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

您不需要OnRunTask与此技术异步

希望有所帮助

修改

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

E.g。

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