Как сделать функцию HttpWebRequest Async? - PullRequest
2 голосов
/ 30 октября 2019

Я пытаюсь сделать свою функцию асинхронной. Как бы я пошел по этому поводу? Это 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();
    }
}

Ответы [ 2 ]

2 голосов
/ 30 октября 2019
 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, но экземпляр следует использовать повторно. Попробуйте провести самостоятельное исследование о том, как этого добиться.

0 голосов
/ 30 октября 2019

Если вы действительно хотите использовать HttpWebRequest, ближайший к асинхронному рабочему процессу будет выглядеть примерно так:

HttpWebRequest webRequest;

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

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

Приведенный выше код использует старый стиль "обратного вызова" для асинхронного подходакоммуникации. Результат вашего запроса будет получен через метод EndWebRequest.

При этом вам следует подумать о переходе на HttpClient, поскольку он поддерживает гораздо более простой синтаксис "async -> await".

...