无休止地等待异步 Web 响应

Endless wait for async Web Response

我遇到以下问题,我尝试等待异步 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。

您正在通过对任务调用 .Result 创建死锁。

你可以做这样的事情,其中​​ remoteUrl 变量是你的网络服务 url

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更高级一些。