私のアプリケーションは、Web サービスと "Application_Start" から大量の情報を非同期にロードします。
ユーザー要求がその情報を使用したいが、準備ができていない場合、スレッドは Monitor.Wait でブロックされます。情報の準備が整うと、キャッシュ オブジェクトは、待機中のすべてのスレッドを Monitor.Pulse します。情報には数十秒かかり、ユーザーはログイン ページにリダイレクトされ、ログイン情報を投稿し、再度リダイレクトされる必要があるため、これで問題ありません。
問題は、Monitor.Wait が CLR ThreadPool スレッドをブロックすることです。「大きな情報」を要求する要求のバーストが到着したかどうかを知る限り、アプリケーションは CLR ThreadPool の枯渇によってブロックされたままになる可能性があります (私は少し混乱しています)。現在の IIS/ASP.NET スレッド ゲーティングを使用)。
大部分の情報は、非同期で呼び出す Web サービスから取得されるため、その操作の IAsyncResult を取得します。
では、CLR ThreadPool スレッドに「この IOCP を待機する」ように指示して、スレッドプール スレッドが他の呼び出しに参加できるようにする方法はありますか?
これはよく説明されていないように感じます。質問の内容が明確でない場合はお知らせください。
よろしく。
PS: 報奨金は終了しましたが、その方法を誰かが知っている場合は、新しい方法を作成して著者に付与します。