gpt4 book ai didi

.net - 通过 ThreadPool 循环时,我的 ThreadStatic 变量中的值是否仍然存在?

转载 作者:行者123 更新时间:2023-12-03 23:38:49 25 4
gpt4 key购买 nike

我正在使用 ThreadStatic 变量来存储一些数据,但我担心我存储在线程上的数据在我完成并释放回 ThreadPool 后仍然存在。在完成线程之前,我是否需要担心清除 ThreadStatic 变量?或者 ThreadPool 在为下一个 QueueUserWorkItem “传递它”之前会为我做这件事吗?这对我来说尤其重要,因为我需要确保我的应用程序中的其他线程在 ThreadStatic 变量方面有一个干净的工作。谢谢!

最佳答案

线程池(按设计)使线程在调用之间保持事件状态。这意味着 ThreadStatic 变量将在对 QueueUserWorkItem 的调用之间保持不变。

这种行为也是你不应该指望的。 ThreadPool 将(最终,自行决定)释放线程并让它们结束,并根据需要构造新线程。

但是,如果您遇到此问题,我会质疑您的设计。如果您需要在 QueueUserWorkItem 中使用特定的、确定性的 ThreadStatic 数据,那么您的线程例程可能是您自己处理线程的不错选择。 ThreadStatic 和 ThreadPool 并不总是很好的组合——您只是没有足够的控制权(因为 ThreadPool 管理线程)来真正利用 ThreadStatic 变量并从中受益。您永远不会知道两个工作项是否在同一个线程、不同线程上,以及是否应该(重新)初始化 threadstatic 变量等。

关于.net - 通过 ThreadPool 循环时,我的 ThreadStatic 变量中的值是否仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/854976/

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