是否有可能在单个请求中使用线程静态变量?当前代码使用线程静态变量进行日志记录,现在我们要使用异步控制器方法(使用async和await模式),这会导致问题,因为在打开新线程时该变量为null。
答案 0 :(得分:9)
await
会导致线程跳转,因此线程静态变量自然会导致问题。
要解决此问题,您可以使用AsyncLocal<T>
(在.NET 4.6中提供),或者(如果必须)HttpContext.Current.Items
。在这两个中,我肯定会建议AsyncLocal<T>
超过Items
,如果它在您的平台上可用。