gpt4 book ai didi

.net - 在 .NET 框架代码中使用 ThreadStatic 是过去时代的有害遗物吗?

转载 作者:行者123 更新时间:2023-12-01 03:55:18 27 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

7年前关闭。




Improve this question



[ThreadStatic]用于 .NET 框架中的各个地方,为各种功能提供环境上下文(例如 Transaction.Current ,用于 TransactionScope )。

不幸的是,这意味着执行一些线程处理(ASP.NET,异步关键字代码)的特性会切换线程,但不要复制 TransactionScope ,所以功能如 TransactionScope don't work as you might expect .

还有一种机制,CallContext.LogicalGetData (更多 here )在线程切换期间正确地跨状态复制(至少在 .NET 4.5 中)。在我看来 TransactionScope如果使用这个而不是 [ThreadStatic] 会更好.

如果正在使用的功能 [ThreadStatic]是在今天编写的,而不是具有向后兼容性要求的现有功能,而是使用 CallContext.(G|S)etLogicalData 编写的。 ?

最佳答案

实际上,它们有非常不同的用例。

  • ThreadStatic无法通过 await 传输值或类似的上下文切换。
  • CallContext不能保留每个线程的值。

  • 所以你看,一个不能代替另一个。 ThreadStatic是低级原语。我认为它的用例在 CallContext 之后并没有减少。等来了。请注意,它的用例非常小——我想我最后一次使用它可能是两年前。

    我会描述诸如 Transaction.Current 之类的东西作为对 TLS 的滥用。它从来不是为此而设计的,所以当 TLS 似乎打破异步时,只是因为它本来就不应该被用于这种情况。

    关于.net - 在 .NET 框架代码中使用 ThreadStatic 是过去时代的有害遗物吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807027/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com