[ThreadStatic]用于 .NET 框架中的各个地方,为各种功能提供环境上下文(例如Transaction.Current,用于TransactionScope)。
TransactionScope不幸的是,这意味着执行一些线程杂耍(ASP.NET,async 关键字代码)的功能TransactionScope会切换线程,但不会复制.
还有另一种机制,CallContext.LogicalGetData(更多here)在线程切换期间正确复制状态(至少在.NET 4.5中)。在我看来,TransactionScope如果它使用 this 而不是[ThreadStatic].
如果正在使用的功能是[ThreadStatic]今天编写的,而不是具有向后兼容性要求的现有功能,它们会使用CallContext.(G|S)etLogicalData?