在委托上调用BeginInvoke时,该操作在单独的线程上执行。如果在ASP.NET中调用,它是否使用CLR工作线程?或者它使用IIS工作线程?在ASP.NET中使用委托来处理异步操作
如果是后者,那么我将需要使用异步ASP.NET模式来确保在CLR工作线程上执行操作。但是如果动作在BeginInvoke结束,我宁愿不这样做。
在委托上调用BeginInvoke时,该操作在单独的线程上执行。如果在ASP.NET中调用,它是否使用CLR工作线程?或者它使用IIS工作线程?在ASP.NET中使用委托来处理异步操作
如果是后者,那么我将需要使用异步ASP.NET模式来确保在CLR工作线程上执行操作。但是如果动作在BeginInvoke结束,我宁愿不这样做。
线程使用/管理在IIS6,IIS7和IIS 7.5中稍有不同。
漂亮的细节,在这里更新说明:如果
ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0
不知道这个回答你的问题,但反正读好。
使用自定义委托并调用其BeginInvoke方法提供了一种快速方法来为应用程序启动工作线程。但不幸的是,它们会损害应用程序的整体性能,因为它们使用ASP.NET使用的同一个池中的线程来处理HTTP请求。请记住,如果异步方法的回调很重要,那么您需要阻止主线程返回客户端,直到异步过程完成。如果日志记录和分析是一个“即忘即断”的方法调用,那么事情就会变得更加简单,您只需启动该方法并允许服务器响应客户端即可。但是,如果回调很重要并且服务器已经完成处理,则服务器上没有任何事情可以处理完成后的回调;这就是为ASP.NET应用程序服务器上的异步处理与WinForms应用程序不同的地方。
谢谢。 MVC支持异步模型。看起来如果我和BeginInvoke技术一起使用这个技术,我的页面将会快速返回并且工作不会占用IIS工作线程。正确? –
重读那篇博文,我可以简单地做一个Thread.Start()技术。对于我的应用程序,我不会有这些过程中发生的任何一个以上(通常只有1个)的风险,所以这可能是我最需要的最简单/最可维护的解决方案。对于任何沿着搜索博客文章的人来说,“我会使用Thread.Start()并创建自己的线程”。 –
@John你是对的。如果你只想快速返回页面,而不需要用户知道结果,那么它很好。但它不会提高性能。 – Mithir