情况:高级Azure IIS7应用程序,必须执行此操作:
请注意,这些是长时间运行的过程(30秒到5分钟)。
如果我们在这里使用Monitor.Wait(...),等待从异步进程回调到同一个Web应用程序,在我们调用的对象上调用Monitor.Pulse(...)Monitor.Wait( ),这会不会匆忙地有效地造成线程饥饿?
如果是这样,如何减轻这种情况?在这里等待回调是否有更好的模式?例如,我们可以将Response对象放入一个线程安全的字典中,然后以某种方式产生,并让回调代码锁定Response并继续响应客户端吗?如果是这样,怎么样?
此外,如果异步进程终止,并且从不调用回调,从而永远不会导致Monitor.Pulse()触发怎么办?我们的线程现在挂了吗?
答案 0 :(得分:1)
根据您的要求,我建议您查看AsyncPage / AsyncController(取决于您使用的是ASP.NET WebForms还是ASP.NET MVC)。这些使您可以在IIS中执行长时间运行的任务,而不会阻塞I / O线程。