静态类构造函数,每个线程调用一次

时间:2015-12-10 15:31:55

标签: c# multithreading

我正在寻找每个线程调用一次的静态类构造函数。像这样:

class MyClass 
{
    [ThreadStatic] // This is not working with a method of course. 
    static MyClass() 
    {

    }
}

实现它的最佳方法是什么?

2 个答案:

答案 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?