Multithreading Azure Web角色-监视器。等待和线程不足

Multithreading Azure Web角色-监视器。等待和线程不足,multithreading,asynchronous,azure,azure-web-roles,Multithreading,Asynchronous,Azure,Azure Web Roles,情况:一个高规模的Azure IIS7应用程序,必须执行以下操作: 接收请求 将请求有效负载放置到队列中,以进行解耦的异步处理 维护与客户端的连接 等待异步进程已完成的通知 回复客户 请注意,这些将是长时间运行的进程(30秒到5分钟) 如果我们在这里使用Monitor.Wait(…),等待从异步进程回调到同一个web应用程序,在调用Monitor.Wait()的对象上调用Monitor.Pulse(…),这是否会导致线程饥饿 如果是这样,如何缓解这种情况?这里有更好的等待回调的模式吗?例如,我们

情况:一个高规模的Azure IIS7应用程序,必须执行以下操作:

  • 接收请求
  • 将请求有效负载放置到队列中,以进行解耦的异步处理
  • 维护与客户端的连接
  • 等待异步进程已完成的通知
  • 回复客户
  • 请注意,这些将是长时间运行的进程(30秒到5分钟)

    如果我们在这里使用Monitor.Wait(…),等待从异步进程回调到同一个web应用程序,在调用Monitor.Wait()的对象上调用Monitor.Pulse(…),这是否会导致线程饥饿

    如果是这样,如何缓解这种情况?这里有更好的等待回调的模式吗?例如,我们可以将响应对象放入线程安全字典中,然后以某种方式让步,让回调代码锁定响应并继续响应客户机吗?如果是,怎么做


    另外,如果异步进程死亡,并且从不调用回调,从而从不触发Monitor.Pulse(),该怎么办?我们的线程现在挂起了吗?

    鉴于您的要求,我建议您查看一下/(取决于您是使用ASP.NET WebForms还是ASP.NET MVC)。这使您可以在IIS中执行长时间运行的任务,而不阻塞I/O线程。

    为什么不改为查看AsyncPage/AsyncController?谢谢。在你的建议下,我们考虑了这一点,这无疑是一条前进的道路。我们的新挑战是Azure主题的100并发连接限制,因此我们只需要增加更多主题。你能回答这个问题吗?如果你愿意,我会勾选这个框。