当调用委托的BeginInvoke时,操作将在单独的线程上执行。如果在ASP.NET中调用,它会使用CLR工作线程吗?还是使用IIS工作线程?
如果是后者,则我需要采用异步ASP.NET模式来确保操作在CLR工作线程上执行。但如果操作最终在BeginInvoke时结束,我就不想这样做。
如果是后者,则我需要采用异步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应用程序不同的地方。