如何使 HttpWebRequest 函数异步?

How to make a HttpWebRequest function Async?

我正在尝试使我的函数异步。我该怎么做?它是一个 HttpWebRequest

private void PostToGoogleChat(string json)
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(_chatUrl);
    httpWebRequest.ContentType = "application/json";
    httpWebRequest.Method = "POST";


    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
        streamWriter.Write(json);
    }

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        var result = streamReader.ReadToEnd();
    }
}
 HttpClient client = new HttpClient();  

public async Task PostAsync(string actionName, object json)
{
        var content = new StringContent(json.ToString(), Encoding.UTF8,"application/json");
        var resultRoles = await client.PostAsync(new Uri(actionName),content);
}

您是新手,所以我不会详细介绍 HttpClient,但应该重用该实例。尝试对如何实现这一点进行一些自我研究。

如果您真的想要使用 HttpWebRequest,最接近异步工作流程的是这样的:

HttpWebRequest webRequest;

void BeginWebRequest()
{
    webRequest.BeginGetResponse(new AsyncCallback(EndWebRequest),null);
}

void EndWebRequest(IAsyncResult result)
{
    webRequest.EndGetResponse(result);
}

上面的代码使用旧的 "callback" 风格方法进行异步通信。您的请求结果将通过 EndWebRequest 方法接收。

也就是说,您应该考虑切换到 HttpClient,因为它支持更简单的 "async -> await" 语法。