我试图理解async/await模式的基本机制,我想在阅读Jennifer Marsman 撰写的.NET 4.0中的杰出工作之后我得到了它 .我的理解是
1 - 线程池有全局队列,线程池中的每个线程都有本地队列
2 - 请求进入,在全局队列中,然后线程池中的thread1(T1)抓取请求.
3 - 此请求是async\await方法.一旦命中了await关键字,就会创建一个包含在任务中的书签(回调)(假定任务未完成),并且此任务被放置在T1的本地队列中.T1返回池中
4 - 任务完成后,如果T1不忙,T1将处理该请求.但是如果T1忙,另一个线程(称之为T2)可能实际上从T1的本地队列中窃取了这个任务
这是我的问题所在.这是如何被禁止的?我读到的所有内容都表明async\await不会改变线程上下文.请参阅链接MSDN对async\await的解释这也是有意义的,因为在MVC应用程序中,请求绑定到一个线程.这意味着如果请求来到异步操作方法,我希望初始和延续任务都由同一个线程池线程完成.工作如何窃取线程不会干扰这一点?欣赏任何洞察力.