使用Async和Await关键字在最近与MS的conf中受到了鼓励,如果我使用Await关键字可以跨越代码将执行的新线程在这种情况下,Asp.net Worker线程会发生什么。是等待请求完成还是将继续提供其他请求。
答案 0 :(得分:5)
await
不会产生新线程。查看我的async
/await
intro post或async
/await
FAQ。
但是,如果您愿意,可以通过显式调用Task.Run
来生成新任务。
当您致电await
时,如果您正在等待的对象尚未完成,那么await
将安排您的async
方法的剩余部分稍后运行,以及当前线程返回到线程池。异步操作正在进行时,async
或await
不使用任何线程。当异步操作完成时,async
方法的其余部分在线程池线程上运行(线程池线程可能与其启动的线程相同或不同)。这通常不是问题,因为在常见情况(1)中,async
方法在正确的请求上下文中恢复。
(1)常见的情况是await
正在等待Task
或Task<TResult>
。