Как использовать RegisterWaitForSingleObject () для подачи заданий в пул потоков? - PullRequest
0 голосов
/ 22 апреля 2020

Я прочитал несколько постов о RegisterWaitForSingleObject, и главный вывод ко всему этому - очень легко использовать это неправильно. Отсюда и мой вопрос.

Ниже значительно упрощено, чтобы сосредоточиться на RegisterWaitForSingleObject.

У меня есть кластер из нескольких веб-приложений REST (ASP. NET Web API2, если это имеет значение ) что каждый получит запрос на работу, которая занимает от 5 секунд до 15 минут. Таким образом, каждый запрос сохраняется в базе данных SQL.

Затем, когда одно из веб-приложений имеет доступный фоновый поток из ThreadPool, оно получает следующее задание из базы данных SQL и обрабатывает его. После завершения он записывает результат в базу данных.

Когда любое из веб-приложений запрашивает статус задания, оно считывает из базы данных и возвращает результат, если запрос завершен.

У меня вопрос, как мне использовать RegisterWaitForSingleObject, чтобы он вызывал меня, когда фоновый поток свободен. Таким образом, сразу же создается максимальное значение в ThreadPool, а затем не запускается до тех пор, пока поток не станет доступен.

Таким образом, все веб-приложения работают на полной скорости, но нет запросов в ожидании доступных поток, когда другое веб-приложение имеет доступные фоновые потоки.

...