1

在最近与 MS 的 conf 中鼓励使用 Async 和 Await 关键字,如果我使用 Await 关键字可以跨越一个新线程,代码将在其中执行在这种情况下,Asp.net Worker 线程会发生什么。它会等待请求完成还是会继续为其他请求提供服务。

4

1 回答 1

5

await不会产生新线程。请参阅我的async/ awaitintro 帖子async/ awaitFAQ

但是,如果您愿意,可以通过显式调用来生成新任务。Task.Run

当您调用 时await,如果您正在等待的对象尚未完成,await则将安排您的方法的其余部分async稍后运行,并将当前线程返回到线程池。async异步操作正在进行或await正在进行异步操作时不使用任何线程。当异步操作完成时,该async方法的其余部分在线程池线程上运行(该线程可能与它启动的线程相同,也可能不同)。这通常不是问题,因为在常见情况 (1) 中,该async方法在正确的请求上下文中恢复。

(1) 常见的情况是直接await等待aTaskTask<TResult>

于 2012-07-24T15:30:31.267 回答