ASP.NET中的线程处理异步等待操作

Sun*_*nny 4 c# asp.net multithreading

对于长时间运行的操作,如果asp.net线程被释放到服务器其他请求.在哪个线程上执行长时间运行操作以及如何在完成后获取asp.net线程.

Ste*_*ary 7

正如我在博客中描述的那样,长时间运行的I/O操作根本不需要线程.相反,它们使用自然异步I/O,它不需要线程.

设备驱动程序通常使用DMA,这允许设备直接读取/写出主系统RAM..NET通过作为线程池一部分的IOCP(I/O完成端口)补充了这种方法,允许每个appdomain的单个线程(或极少数线程)等待大量的I/O操作.

要回答问题的后半部分,异步方法随请求上下文一起恢复,但它可能会也可能不会出现在之前的同一个线程上await.更常见的情况是当I/O操作完成时,它向IOCP发出信号,它使线程池线程执行一些内务处理(将任务标记为完成等),然后该相同的线程进入ASP.NET请求上下文并继续执行处理程序.这并不总是发生 - 有时需要线程切换 - 但这是最​​常见的情况.