对于长时间运行的操作,如果 asp.net 线程被释放用于服务器其他请求。长时间运行的操作将在哪个线程上执行,完成后如何获取 asp.net 线程。
最佳答案
正如我在我的博客中描述的那样,long-running I/O operations do not require a thread at all .相反,它们使用不需要线程的天然异步 I/O。
设备驱动程序通常使用 DMA,这允许设备直接读/写主系统 RAM。 .NET 通过作为线程池的一部分的 IOCP(I/O 完成端口)补充了这种方法,允许每个应用程序域的单个线程(或很少的线程)等待大量的 I/O 操作。
要回答你问题的后半部分,异步方法将使用请求上下文恢复,但它可能会也可能不会在它所在的同一个线程上在 await
之前。更常见的情况是当 I/O 操作完成时,它向 IOCP 发出信号,IOCP 需要一个线程池线程来做一些内务处理(将任务标记为完成等),然后同一个线程进入 ASP.NET请求上下文并恢复执行处理程序。这种情况总是发生 - 有时需要线程切换 - 但这是最常见的情况。
关于c# - ASP.NET 异步等待操作中的线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37968349/