Я прочитал несколько постов о RegisterWaitForSingleObject, и главный вывод ко всему этому - очень легко использовать это неправильно. Отсюда и мой вопрос.
Ниже значительно упрощено, чтобы сосредоточиться на RegisterWaitForSingleObject.
У меня есть кластер из нескольких веб-приложений REST (ASP. NET Web API2, если это имеет значение ) что каждый получит запрос на работу, которая занимает от 5 секунд до 15 минут. Таким образом, каждый запрос сохраняется в базе данных SQL.
Затем, когда одно из веб-приложений имеет доступный фоновый поток из ThreadPool, оно получает следующее задание из базы данных SQL и обрабатывает его. После завершения он записывает результат в базу данных.
Когда любое из веб-приложений запрашивает статус задания, оно считывает из базы данных и возвращает результат, если запрос завершен.
У меня вопрос, как мне использовать RegisterWaitForSingleObject, чтобы он вызывал меня, когда фоновый поток свободен. Таким образом, сразу же создается максимальное значение в ThreadPool, а затем не запускается до тех пор, пока поток не станет доступен.
Таким образом, все веб-приложения работают на полной скорости, но нет запросов в ожидании доступных поток, когда другое веб-приложение имеет доступные фоновые потоки.