2017-10-12 96 views
2

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

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

那棱的是,我不能让OnRunTask()问题异步,因为它需要返回一个int:

例如

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

    if(result) 
    { 
     return GcmNetworkManager.ResultSuccess; 
    } 

    return GcmNetworkManager.ResultReschedule; 
} 

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

回答

2

您可以使用您的Task.Run方法OnRunTask里面是这样的:

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

你没有必要有OnRunTask异步使用这种技术

希望它可以帮助

编辑

如果您需要返回值来匹配框架/库signatu您也可以使用。结果

例如,

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

该任务的返回值如何? – RVandersteen

+0

@Randersteen你可以在任务运行之前和任务运行完成之后创建一个本地变量返回它我认为 – fandro

+0

@RVandersteen检查这个帖子它可以帮助你:https://stackoverflow.com/questions/18050836/getting-返回值从任务运行 – fandro