有没有可能在单个请求中使用线程静态变量?当前代码使用线程静态变量进行日志记录,现在我们想要使用异步控制器方法(使用异步和等待模式),但由于在新线程打开时该变量为空,所以会出现问题。
await
可能会引起线程跳转,因此线程静态变量通常会导致问题。
要解决此问题,您可以使用 AsyncLocal<T>
(在 .NET 4.6 中可用), 或者(如果必须的话)使用 HttpContext.Current.Items
。其中两个选项,如果您的平台支持,我一定会推荐使用 AsyncLocal<T>
而不是 Items
。
AsyncLocal<T>
而不是HttpContext.Current
,因为HttpContext.Current
被认为是一种糟糕的设计,并已在ASP.NET Core中被移除。 - Stephen Cleary