HttpClient зависает с параллельными задачами - PullRequest
0 голосов
/ 22 декабря 2018

У меня около 1000 запросов, которые я делаю при запуске приложения.После вызова ~ 200 запросов, возвращается только ~ 10, а затем мое приложение зависает и больше результатов не возвращается.

Вот как выглядит мой код:

// File1.cs

await Task.WhenAll(allUsers.Select(user => Connect(user)));

// File2.cs (вызывается внутри метода Connect)

var result = await client.PostAsync($"https://url.com", 
                    new FormUrlEncodedContent(parameters)))

HttpClient является статическим, поэтому не должно быть проблем со слишком большим количеством экземпляров.

Я пробовал такие решения, как:

  1. Настройка ServicePointManager.DefaultConnectionLimit = int.MaxValue
  2. Размещение await client.PostAsync (...) в использованииоператор
  3. Использование .ConfigureAwait (false)
  4. Установка значения времени ожидания
  5. Поток данных TPL (ActionBlock) с параметром MaxDegreeOfParallelism, равным 2

Ни один извышеуказанные решения сработали, и у меня заканчиваются варианты.Есть ли причина, по которой он не может / не будет генерировать исключение или возвращать значение?Есть ли вероятность тупика при слишком большом количестве одновременных запросов?Любые предложения помогут.Спасибо

Ps.Я использую .Net Core 2.1

1 Ответ

0 голосов
/ 22 декабря 2018

Убедитесь, что операция в API была написана как асинхронный метод (не только метод действия контроллера), и лучше проверить правильность сценариев sql с уровнем изоляции незафиксированных транзакций чтения и выбрать запрос без блокировки типа параллельного выполнения.реализации (если sql db :)), следовательно, API в основном выполняет чтение и запись в db

...