Что делать, если нет потока для обратного вызова асинхронной функции - PullRequest
0 голосов
/ 11 октября 2019

Я начинаю с того, что когда мы делаем асинхронный запрос, то поток из пула потоков будет назначен этому запросу, и когда этот запрос отправляется в базу данных как SQL-запрос, пока запрос не завершится, thead, выделенный для этого запроса, будет освобожден. и тогда другой запрос может использовать этот поток.

Итак, моя проблема в том, что давайте подумаем о ситуации, когда все потоки были выделены для запроса, и в пуле потоков нет ни одного потока. Затем представьте себе обратный вызов SQL-запроса и то, как процессор обрабатывает этот обратный вызов, поскольку в пуле потоков нет свободного потока.

1 Ответ

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

Обычно процессор управляет стеками потоков, но если вы начнете перебрасывать потоки без какого-либо контроля на уровне программирования, он может заблокировать разработчика и фактически приложение. Максимальное количество потоков определяется количеством физическихдоступные ресурсы.

ThreadPool.GetAvailalbeThreads возвращает количество потоков, доступных в данный момент в пуле. Это максимальное количество потоков минус текущие активные потоки.

ThreadPool.GetAvailableThreads(out workers, out ports); 
...