[ThreadStatic]使用属性定义,而ThreadLocal<T>使用泛型。
为什么选择不同的设计解决方案?
在这种情况下,使用泛型而非属性有什么优点和缺点?

最佳答案

评论中提到的博客文章并没有明确,但我发现非常重要的是[ThreadStatic]不会自动为每个线程初始化事物。例如,假设您有以下内容:

[ThreadStatic]
private static int Foo = 42;

使用此功能的第一个线程将看到Foo初始化为42。但是后续线程不会。初始化程序仅适用于第一个线程。因此,您最终不得不编写代码来检查它是否已初始化。
ThreadLocal<T>通过让您提供一个初始化函数(如Reed的博客所示)解决了该问题,该函数在第一次访问该项目之前运行。

我认为,使用[ThreadStatic]代替ThreadLocal<T>没有任何优势。

10-08 11:34