Asp.net MVC / WebAPI中的异步

时间:2012-07-24 15:00:27

标签: asp.net asp.net-mvc asp.net-web-api

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

1 个答案:

答案 0 :(得分:5)

await不会产生新线程。查看我的async/await intro postasync/await FAQ

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

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

(1)常见的情况是await正在等待TaskTask<TResult>