【发布时间】:2015-12-10 22:47:26
【问题描述】:
当我在 MVC 控制器上执行异步操作时,尤其是在处理 I/O 操作时,我不明白幕后究竟发生了什么。假设我有一个上传操作:
public async Task<ActionResult> Upload (HttpPostedFileBase file) {
....
await ReadFile(file);
...
}
据我所知,这些是发生的基本步骤:
从线程池中窥视一个新线程并分配给处理传入请求。
当 await 被命中时,如果调用是 I/O 操作,那么原始线程将返回到池中,并将控制权转移到所谓的 IOCP(输入输出完成端口)。我不明白为什么请求仍然存在并等待答案,因为最终调用客户端将等待我们的请求完成。
我的问题是:谁/何时/如何等待完全阻塞发生?
注意:我看到了博文 There Is No Thread,它对 GUI 应用程序很有意义,但对于这种服务器端场景,我不明白。真的。
【问题讨论】:
-
您到底在寻找什么:解释常规 IHttpAsyncHandler 如何与
async/await集成或为什么IHttpAsyncHandler完全有效或其他什么? -
我很难理解哪一部分你不明白,你能澄清一下吗?如果将处理线程放回池中,则请求没有理由终止 - 它稍后会恢复,可能在另一个线程上。 BTW 控制未转移到 IOCP。
-
考虑看这篇文章,它解释了 MVC 中的异步等待 qawithexperts.com/article/c-sharp/…
标签: c# asp.net-mvc multithreading asynchronous async-await