我正在寻找每个线程调用一次的静态类构造函数。像这样:
class MyClass
{
[ThreadStatic] // This is not working with a method of course.
static MyClass()
{
}
}
实现它的最佳方法是什么?
答案 0 :(得分:3)
我会使用ThreadLocal类来实现此目的。它类似于使用ThreadStatic
关键字,但是当您需要为每个线程提供初始化代码时,使用起来会更方便,就像您的情况一样。
所以如果你有:
public class MyClass
{
public MyClass()
{
// normal constructor, with normal initialization code here.
}
}
如果您对每个帖子有一个单独的MyClass
实例感兴趣,可以执行以下操作:
ThreadLocal<MyClass> threadSpecificMyClass = new ThreadLocal<MyClass>(() => new MyClass());
然后,您可以在多个线程之间共享threadSpecificMyClass
,但在调用threadSpecificMyClass.Value
时,它们将获得不同的实例。而且您不必担心检查null
,因为初始化会自动发生。
答案 1 :(得分:1)
您是否无法创建(静态)属性并为其分配新实例?然后制作属性Threadstatic?