2

我正在开发一个多线程应用程序,因此,我一直试图不使用可能会在我在不同线程中使用的类型实例中引发冲突的私有字段。相反,我一直在收集作为方法参数工作所需的信息。这导致了几十个方法都声明了相同的参数:

private void MySubmethod(MyConfiguration configuration)

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

只声明一个私有线程静态字段,在每个线程正在调用的主方法中对其进行初始化并在所有子方法中重用该字段,从而使参数过时,这是一个好主意吗?或者它有什么缺点,所以我宁愿专注于为每个线程创建一个新实例?

[ThreadStatic]
private static MyConfiguration _configuration;
4

1 回答 1

2

只声明一个私有线程静态字段,在每个线程正在调用的主方法中对其进行初始化并在所有子方法中重用该字段,从而使参数过时,这是一个好主意吗?

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

于 2014-07-11T12:51:51.693 回答