kurai_maid
@kurai_maid

Зависает WebResponse, как исправить?

public static async Task<string> POST(string url, string postfields)
        {
            WebRequest request = WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Timeout = 5000;
            byte[] parameters = System.Text.Encoding.UTF8.GetBytes(postfields);
            string res = null;
            request.ContentLength = parameters.Length;

            using(Stream stream = request.GetRequestStream())
            {
                stream.Write(parameters, 0, parameters.Length);
            }

            using (WebResponse response = await request.GetResponseAsync())
            {
                using (Stream stream = response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        res = reader.ReadToEnd();
                    }
                }
            }
            return res;
        }


Программа намертво зависает при выполнении WebResponse response = await request.GetResponseAsync()
Менять таймауты или убирать "using" и выполнять request.Abort() response.Close() не помогает

UPD1: Только что попробовал код в dotnetfiddle.net - всё работает. Но я использую .NET 4.8, а там 4.7.2 - может ли быть это багом?
  • Вопрос задан
  • 330 просмотров
Решения вопроса 2
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Выносите процедуру в отдельный поток.
Когда придёт ответ на Ваш запрос - никто не знает, поэтому, чтобы работала остальная логика, Вашему приложению не нужно будет ждать ответа.
Ответ написан
Комментировать
kurai_maid
@kurai_maid Автор вопроса
var result = await API.POST()

Сделать метод, где вызывался API.POST, асинхронным и добавить await - было решением
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы