C#如何使这个HttpRequest异步?

use*_*581 -1 c# asynchronous

我有这个代码:

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
using (WebResponse myResponse = myRequest.GetResponse())
{
    using (StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8))
    {
        result = sr.ReadToEnd();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在完成此请求后运行此代码:

MessageBox.Show("Finish");
Run Code Online (Sandbox Code Playgroud)

此外,当我运行此代码时,我的程序变得冻结.我认为这个问题可以通过异步HttpWebRequest来解决.

Ese*_*ser 8

你可以这样做(在异步方法中):

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
using (WebResponse myResponse = await myRequest.GetResponseAsync())
{
    using (StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8))
    {
        result = sr.ReadToEnd();
    }
}
MessageBox.Show("Finish");
Run Code Online (Sandbox Code Playgroud)

但我建议使用HttpClient

using (var client = new HttpClient())
{
    var result = await client.GetStringAsync(URL);
}
MessageBox.Show("Finish");
Run Code Online (Sandbox Code Playgroud)

顺便说一句:通过使用GetStringAsync您使用您的网站正在使用的编码,可能不是UTF8

  • @RezaAghaei 不一样。我永远不会将您的答案用于 .Net >= 4.5 (2认同)