ExecuteRegisteredAsyncTasks是否释放请求处理线程以服务其他请求?

Pol*_*Pol 2 .net c# asp.net iis web-services

我注意到ExecuteRegisteredAsyncTasks调用返回后的代码与该调用之前的代码在同一线程中执行。因此,我知道手动调用ExecuteRegisteredAsyncTasks不会释放请求处理线程来处理其他请求,并且应该仅自动调用此方法以获得扩展好处?

在msdn上是示例代码,但帮助无法回答此问题。

更新

就我而言,PageAsyncTasks我异步调用Web服务(使用Begin *和End *),所以我不使用线程池。

Dar*_*rov 5

在该RegisterAsyncTask方法的MSDN示例中,它们仅声明一个AsyncTaskDelegate由Begin和End方法调用的an 。当您异步调用委托时,它使用线程池中的线程,因此在这种情况下,您基本上没有任何改善。唯一的速度改进可能是并行执行多个操作,否则将同步执行。

如果要获得真正的性能提升,则需要使用IOCP(I / O完成端口)。它们适用于I / O密集型任务,例如网络调用(数据库调用,Web服务调用等)。不适合CPU密集型任务。因此,假设您要使用WebClient.DownloadStringAsync方法执行HTTP调用。此方法不使用线程池中的线程。它向内核注册IOCP并触发HTTP请求。当它将控制权返回给调用方时,没有线程被占用,这在整个HTTP请求期间都没有被占用。请求完成后,将发出IOCP信号,并从线程池中提取一个线程来处理结果。

看一下ASP.NET中的异步页面文章。IOCP在那里有更好的解释。