在最近与 MS 的 conf 中鼓励使用 Async 和 Await 关键字,如果我使用 Await 关键字可以跨越一个新线程,代码将在其中执行在这种情况下,Asp.net Worker 线程会发生什么。它会等待请求完成还是会继续为其他请求提供服务。
问问题
1849 次
1 回答
5
await
不会产生新线程。请参阅我的async
/ await
intro 帖子或async
/ await
FAQ。
但是,如果您愿意,可以通过显式调用来生成新任务。Task.Run
当您调用 时await
,如果您正在等待的对象尚未完成,await
则将安排您的方法的其余部分async
稍后运行,并将当前线程返回到线程池。async
异步操作正在进行或await
正在进行异步操作时不使用任何线程。当异步操作完成时,该async
方法的其余部分在线程池线程上运行(该线程可能与它启动的线程相同,也可能不同)。这通常不是问题,因为在常见情况 (1) 中,该async
方法在正确的请求上下文中恢复。
(1) 常见的情况是直接await
等待aTask
或Task<TResult>
。
于 2012-07-24T15:30:31.267 回答