当我们处理 ASP.NET Web API 中的一些扩展点时,我们还处理了 TAP(基于任务的编程模式)。在某些时候,我们希望为 async 方法提供一个延续,ContinueWith
并且我们在传递给的委托中做一些事情ContinueWith
。
正如 Brad Wilson在这里深入解释的那样,当我们提供延续时,SynchronizationContext 至关重要。对我来说,我需要回到SynchronizationContext
ASP.NET Web API 的唯一地方是我需要玩的地方HttpContext.Current
(这是我在 ASP.NET Web API 应用程序中永远不会做的事情)和地方我需要为基于线程的信息设置一些信息,例如Thread.CurrentPrincipal
.
SynchronizationContext
所以问题是:当我们在某些扩展点(例如消息处理程序、过滤器、格式化程序等)中提供延续时,我们是否想要回到过去?