在ASP中使用委托.. NET处理异步操作

本文关键字:NET 处理 异步操作 ASP | 更新日期: 2023-09-27 18:14:44

在委托上调用BeginInvoke时,该动作在单独的线程上执行。如果在ASP中调用。. NET是否使用CLR工作线程?还是使用IIS工作线程?

如果是后者,那么我将需要使用异步ASP。. NET模式以确保操作在CLR工作线程上执行。但我宁愿不这样做,如果动作结束在那里在BeginInvoke。

在ASP中使用委托.. NET处理异步操作

它使用一个CLR工作线程。

如这里所述

首先,ASP。.NET使用进程范围的CLR线程池来服务请求(有关CLR线程池的更多背景信息,请参阅本期的。NET专栏)。

编辑:

另一个资源是这个博客

不幸的是,BeginInvoke使用的线程实际上是从ASP使用的同一个工作线程池中获取的。Net处理页面请求

线程使用/管理在IIS6、IIS7和iis7.5中略有不同。

非常详细和更新的解释在这里:

ASP。. NET线程在IIS 7.5、IIS 7.0和IIS 6.0上的使用

不确定这是否回答了你的问题,但无论如何,这是一个很好的阅读。

使用自定义委托并调用它的BeginInvoke方法为应用程序提供了一种快速启动工作线程的方法。但不幸的是,它们会损害应用程序的整体性能,因为它们消耗ASP使用的同一线程池中的线程。. NET处理HTTP请求

也要记住,如果异步方法的回调很重要,那么你需要阻止主线程返回到客户端,直到异步进程完成。如果日志记录和分析是一个"即发即忘"的方法调用,那么事情就简单多了,您可以只启动该方法并允许服务器响应客户端。然而,如果回调很重要,并且服务器已经完成了处理,那么一旦回调完成,服务器上就不会发生任何事情来处理回调;这就是在服务器上异步处理ASP的地方。. NET应用程序不同于WinForms应用程序