Xamarin.Forms异步/等待操作不起作用

时间:2019-05-07 06:22:17

标签: c# xamarin.forms xamarin.android

我有一个简单的Xamarin.android移动应用程序,该应用程序从本地PC中托管的API获取数据。问题是,当我运行该应用程序时,不会获得预期的结果。

_client是HttpClient,我可以从模拟器的浏览器访问相同的URL并获取数据。以下是我的代码。

 protected async override void OnAppearing()
    {
        string content = await _client.GetStringAsync("http://192.168.10.101:1001/api/todo");
        base.OnAppearing();
    }

一旦我按下F5模拟器,就会启动并运行该应用程序,但没有获取任何数据。同样,当我调试时,一旦按下F10,await语句将执行,应用程序将继续运行,而不会等待。

有人对这个问题有任何想法吗?

我正在使用API​​版本9,级别28和Visual Studio 2019 谢谢。

2 个答案:

答案 0 :(得分:0)

摘自await关键字的官方文档:

  

等待运算符将暂停执行,直到该方法的工作完成。同时,控制权返回给调用者。当任务完成执行时,await表达式的计算结果为...

这意味着在某些情况下(我怀疑您也是如此),在执行等待的方法时,程序处于不再重要的状态。如果我是正确的。然后,您可以使用Wait()Result

解决此问题。
protected override void OnAppearing()
{
    string content = _client.GetStringAsync("http://192.168.10.101:1001/api/todo").Result;
    base.OnAppearing();
}

PS

但是,即使使用Result对您来说还是可行的,我还是建议您花更多时间研究async/await并针对您要解决的问题提出更好的解决方案。这个so answer是一个很好的起点。

答案 1 :(得分:0)

问题已获得许可。我尚未在资源中设置权限或网络安全配置。几秒钟后,它给了我一个错误。一旦我设置了这些功能,它就可以正常工作。