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

标签 c# asp.net multithreading

对于长时间运行的操作,如果 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/

相关文章:

multithreading - 2013年WCF长投票

c# - 优化 : How should i Optimize the Linq Concat of Collections? C#

c# - System.Data.SQLite 设计时与 VS 2013 的集成

c# - 在 asp.net core 中进行集成测试时获取 404 Not Found

c# - 在文档准备好之前隐藏元素?

c++ - 线程不适用于带有模板参数的函数

c# - 根据条件从列表中取出 N 项

c# - WCF 服务主机何时销毁自定义 IDispatchMessageInspector?

javascript - 在页面离开时保存记录

c++ - 如何实现与平台无关的异步写入文件?