ASP.NET Core没有SynchronizationContext
。
那么async
代码的延续如何恢复到其开始的位置(原始线程)?
答案 0 :(得分:2)
TL; DR延续不必返回原始线程。
Stephen Cleary对ASP.NET Core为什么没有SynchronizationContext有很好的解释。
当异步处理程序在旧版ASP.NET上恢复执行时, 连续性排队到请求上下文。延续必须 等待已排队的任何其他继续(仅 一次可以运行一次)。准备运行时,将使用一个线程 从线程池中进入请求上下文,然后继续 执行处理程序。 “重新输入”请求上下文涉及 许多内部管理任务,例如设置HttpContext.Current 以及当前线程的身份和文化。
使用无上下文的ASP.NET Core方法,当异步时 处理程序恢复执行,从线程池中获取一个线程,然后 执行延续。避免了上下文队列,并且存在 无需“输入”请求上下文。除此之外 异步/等待机制针对无上下文而高度优化 场景。对于异步请求,要做的工作很少。
我还建议您深入研究评论,那里有很多有用的东西。