在C#,Xamarin Forms中获取异步任务的结果

时间:2018-01-12 09:38:23

标签: c# xamarin.forms async-await

我有以下几行代码,用于检查设备是否使用异步方法在数据库中注册。

if (CrossConnectivity.Current.IsConnected)
{
      return await App._deviceService.GetDevice(id);
}

我原以为await会做到这一点 - 等待GetDevice完成然后返回它的值,但是在调查时我认为如果我想得到调用的实际结果我需要使用回调,所以我可以采取行动。

有人可以告诉我,如果我要沿着这条路走下去吗?下面是被称为异步任务的

public async Task<bool> GetDevice(string deviceID)
{
    string url = Resources.Urls.dev + Resources.DeviceApi.Get + "?id=" + deviceID;
    HttpResponseMessage result;
    result = await App.HttpClientInstance().GetAsync(url);

    if (result.StatusCode == System.Net.HttpStatusCode.OK)
    {
        return true;
    }
    return false;
}

2 个答案:

答案 0 :(得分:4)

不,实际上使用await来调用这样定义的方法(Task<bool>)意味着调用者将等待&#34;等等。要使返回值准备就绪,您的return将根据true调用的结果返回falseGetDevice

更新:我在澄清代码实际上并没有主动等待来完成该方法,因为这会破坏async/await组合的目的,但我的意思是return语句只有在方法实际完成后才会执行。当HttpClient请求运行时,调用线程可以在此期间自由执行其他任务,这是使用async/await的真正优势。

答案 1 :(得分:1)

return await App._deviceService.GetDevice(id);

这将返回任何GetDevice返回(truefalse)。您无需进一步操作,因为await已完成Task

一个小建议是将GetDevice返回更改为

return result.IsSuccessStatusCode;

这样您就不会直接依赖200而是依赖2xx(任何成功代码)。