gpt4 book ai didi

c# - ThreadStatic 字段 VS 方法参数 VS 每个线程一个实例

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:51 24 4
gpt4 key购买 nike

我在多线程应用程序上工作,因此,我总是尽量不使用私有(private)字段,这可能会在我在不同线程中使用的类型实例中引发冲突。相反,我一直在收集我需要的信息作为方法参数。这导致了数十种方法都声明了相同的参数:

private void MySubmethod(MyConfiguration configuration)

现在我正在考虑重新设计类型并为每个工作线程创建一个实例,但后来我偶然发现了 ThreadStatic 属性。

是否只声明一个私有(private)的线程静态字段,在每个线程调用的主方法中初始化它,并在所有子方法中重用这个字段,使参数过时?还是它有任何缺点,所以我宁愿专注于为每个线程创建一个新实例?

[ThreadStatic]
private static MyConfiguration _configuration;

最佳答案

Is it a good idea to just declare a private threadstatic field, initialize it inside the main method each thread is calling and reuse this field inside all sub-methods, rendering the parameter obsolete?

不,不是;这意味着任何涉及线程的代码现在都非常不可靠;对于 ThreadPool、TPL 和 async/await 之类的东西,线程在现代应用程序中是不可避免的(即使它们是隐式的而不是显式的你的代码)。依赖于线程的变量也很难调试。除非有非常充分的理由,否则我的建议是保留总体上下文,或插入现有的稳健实现。例如,在 Web 应用程序中,您可能会通过静态方法合理地访问当前请求 - 但即便如此,您也需要小心知道您是在 request 线程上,还是在工作线程上应该把它需要知道的一切都放在盘子里。

关于c# - ThreadStatic 字段 VS 方法参数 VS 每个线程一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24697985/

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