HttpClient PostAsync блокирует - PullRequest
       31

HttpClient PostAsync блокирует

0 голосов
/ 25 июня 2019

Я пытаюсь позвонить HttpClient.PostAsync() из моего потока пользовательского интерфейса.Я проверил это на своей машине разработки, и она работает нормально, но на моей целевой машине, кажется, блокирует поток пользовательского интерфейса.Я запустил этот тест на обеих машинах

int tick = Environment.TickCount;
Task<HttpResponseMessage> postTask =  _httpClient.PostAsync(Uri, new StringContent(messageString));
MessageBox.Show(String.Format("Time {0}", Environment.TickCount - tick));
response = await postTask;

На моей машине для разработки в окне сообщения отображается ~ <100 мс, однако на целевой машине оно превышает 2,5 секунды.Есть что-то, чего мне не хватает или требуется какая-то настройка / os / аппаратная поддержка. </p>

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Это, вероятно, проблема с поиском DNS, и, как указано в комментариях, она, скорее всего, кешируется для будущих вызовов, если вам это абсолютно необходимо, чтобы не блокировало пользовательский интерфейс.

Единственное решение для этого - разгрузить это (за счет потока пула потоков) ..

var postTask = await Task.Run(() => _httpClient.PostAsync(Uri, new StringContent(messageString)));
0 голосов
/ 25 июня 2019

Для дальнейшего использования, я думаю, я нашел решение.Похоже, время было взято в ServicePointManager.FindServicePoint(), что называется созданием WebRequest.Я заметил, что настройка моей целевой машины с надлежащим шлюзом разрешила проблему скорости, однако в моем случае машина не всегда будет подключена к большей локальной сети или Интернету, поэтому я решил, что если вы установите HttpClientHandler.UseProxies в false, она пропустит попыткунайти прокси-сервер, и теперь он возвращается через ~ 32 мс.

Странно, что у них не было бы FindServicePoint() async, но это казалось проблемой.Я думал, что с моим Uri, являющимся фиксированным IP, т.е. http://192.168.250.1:80/..., я бы обойти все эти вещи, но не случай

...