Мое приложение загружает асинхронно большой объем информации из веб-службы и «Application_Start».
Если пользовательский запрос хочет использовать эту информацию, но он еще не готов, поток будет заблокирован с помощью Monitor.Wait. Когда информация будет готова, объект кеша будет отслеживать все ожидающие потоки. Это должно быть нормально, поскольку информация занимает несколько секунд, и пользователь должен быть перенаправлен на страницу входа, опубликовать информацию для входа и снова быть перенаправлен.
Проблема в том, что Monitor.Wait заблокирует поток CLR ThreadPool, и, насколько мне известно, если приходит пачка запросов с просьбой предоставить «большую информацию», приложение может оставаться заблокированным из-за голодания CLR ThreadPool (у меня есть небольшой беспорядок с текущим стробированием потоков IIS / ASP.NET).
Поскольку большая часть информации поступает от веб-службы, которую я вызываю асинхронно, у меня есть IAsyncResult этой операции.
Итак, есть ли способ сказать потоку CLR ThreadPool «Ждать этого IOCP», чтобы поток пула потоков мог начать посещать другой вызов?
У меня такое чувство, что это недостаточно хорошо объяснено, дайте мне знать, если неясно, о чем я спрашиваю.
С Уважением.
PS: Хотя награда закончилась, если кто-нибудь знает, как это сделать, я подниму новую и предоставлю автору.