我的应用程序从 Web 服务和“Application_Start”异步加载大量信息。
如果用户请求想要使用该信息,并且它还没有准备好,则线程将被 Monitor.Wait 阻塞。当信息准备好后,缓存对象会Monitor.Pulse所有等待的线程。这应该没问题,因为信息需要十几秒钟,并且必须将用户重定向到登录页面,发布登录信息,然后再次重定向。
问题是 Monitor.Wait 会阻塞 CLR ThreadPool 线程,据我所知,如果有大量请求到达要求“大信息”,应用程序可能会被 CLR ThreadPool 饥饿阻塞(我有点乱与当前的 IIS/ASP.NET 线程门控)。
由于大部分信息来自我异步调用的 Web 服务,因此我拥有该操作的 IAsyncResult。
那么,有没有办法告诉 CLR ThreadPool 线程“等待这个 IOCP”,以便线程池线程可以开始参加其他调用?
我觉得这没有得到很好的解释,如果不清楚我在问什么,请告诉我。
问候。
PS:虽然赏金已经结束,但如果有人知道如何做到这一点,我会提出一个新的并授予作者。