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