带有ASP.NET Web API和WCF应用程序的AsyncLocal <t>

时间:2018-10-10 21:09:27

标签: asp.net asynchronous httpcontext configureawait

我有ASP.NET Web API和WCF应用程序。

我需要一个“隐式”上下文,它将随每个请求一起流动。基本上存储日志记录所需的变量或一些可能更改请求执行行为的重要标头。这些变量收集在BeginRequest事件中,并且可以在单个请求上下文中的任何位置使用该变量。我不想在代码中无处不在地将这些变量作为参数显式传递。

从现在开始,我一直在使用HttpContext.Current.Items,它工作正常。我的应用程序主要是同步的,现在转向异步代码。我仍然可以对我的异步流使用HttpContext.Current.Items,但是它与.ConfigureAwait(false)不兼容(显然在之后变为null),我想从中受益(消除了重新输入上下文的开销)。

我从AsyncLocal<T>开始实现以保存我的隐式上下文变量,并且想知道它是否安全且是一种好习惯?在异步流程中从一个线程切换到另一个线程或从一个请求切换到另一个请求时,这些变量是否可能在线程之间泄漏?

0 个答案:

没有答案