什么可以替代ASP.NET Core中的SynchronizationContext?

时间:2019-05-09 12:40:26

标签: asp.net-core

ASP.NET Core没有SynchronizationContext

那么async代码的延续如何恢复到其开始的位置(原始线程)?

1 个答案:

答案 0 :(得分:2)

TL; DR延续不必返回原始线程。

Stephen Cleary对ASP.NET Core为什么没有SynchronizationContext有很好的解释。

  

当异步处理程序在旧版ASP.NET上恢复执行时,   连续性排队到请求上下文。延续必须   等待已排队的任何其他继续(仅   一次可以运行一次)。准备运行时,将使用一个线程   从线程池中进入请求上下文,然后继续   执行处理程序。 “重新输入”请求上下文涉及   许多内部管理任务,例如设置HttpContext.Current   以及当前线程的身份和文化。

     

使用无上下文的ASP.NET Core方法,当异步时   处理程序恢复执行,从线程池中获取一个线程,然后   执行延续。避免了上下文队列,并且存在   无需“输入”请求上下文。除此之外   异步/等待机制针对无上下文而高度优化   场景。对于异步请求,要做的工作很少。

     

Read more

我还建议您深入研究评论,那里有很多有用的东西。