无休止地等待异步Web响应

时间:2016-05-05 23:04:54

标签: c# android xamarin xamarin.android

我有以下问题,我尝试等待异步Web响应。 但它从未结束。

  public string getTermine(string trmId)
    {
        System.Threading.Tasks.Task<string> lisi = LoadTermine((HttpWebRequest)WebRequest.Create("http://" + curent.usrCH + apiKey + curent.phrase + apiTrmIDIS + trmId));//Request get String result like http://ajax.googleapis.com/ajax/services/search/web?v=1.0&start="+i+"&q=
        lisi.Wait();
        return lisi.Result;
    }
    private async System.Threading.Tasks.Taskstring>LoadTermine(HttpWebRequest myRequest)
    {
        //List<Termine> terminListe = new List<Termine>();
        List<Appointment> Resu = null;
        using (WebResponse response = await myRequest.GetResponseAsync())
        {
            using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
            {
                Resu = reader.ReadToEnd();

            }
        }
        return Resu;
    }

P.S。我不能使用和同步请求,因为这些方法是iOS,WinPhone和Android使用的基本代码的一部分,我不知道为什么我不能获得同步WebResponse。

1 个答案:

答案 0 :(得分:3)

通过在任务上调用.Result来创建死锁。

你可以做类似这样的事情,其中​​remoteUrl variabled是你的网络服务的网址

private async System.Threading.Tasks.Task<string> LoadTermineAsync(HttpWebRequest myRequest)
{
    using (var client = new HttpClient()) {
        using (var request = new HttpRequestMessage(HttpMethod.Get, myRemoteUrl)) {
            var response = await client.SendAsync(request).ConfigureAwait(false);

            var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            return result;
        }
    }
}

有关Async/Await

的更多信息

这个evolve video更先进一点。