5

是否有可能在单个请求中使用线程静态变量?当前代码使用线程静态变量进行日志记录,现在我们想使用异步控制器方法(带有异步和等待模式),这会导致问题,因为当打开新线程时变量为空。

4

1 回答 1

14

await会导致线程跳转,所以线程静态变量自然会出问题。

要解决此问题,您可以使用AsyncLocal<T>(在 .NET 4.6 中可用)或(如果必须)使用HttpContext.Current.Items. 在这两个中,我肯定会推荐AsyncLocal<T>over Items,如果它在您的平台上可用。

于 2017-02-28T14:14:11.883 回答