C# 每个线程调用一次的静态类构造函数

C# 每个线程调用一次的静态类构造函数,c#,multithreading,C#,Multithreading,我正在寻找每个线程调用一次的静态类构造函数。大概是这样的: class MyClass { [ThreadStatic] // This is not working with a method of course. static MyClass() { } } 实现这一目标的最佳方式是什么 您不能创建一个(静态)属性并为其分配一个新实例吗?然后使属性Threadstatic?您不能创建一个(静态)属性并为其分配一个新实例吗?然后使属性Threadsta

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

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

    }
}
实现这一目标的最佳方式是什么

您不能创建一个(静态)属性并为其分配一个新实例吗?然后使属性Threadstatic?

您不能创建一个(静态)属性并为其分配一个新实例吗?然后使属性Threadstatic?

我将使用该类进行此操作。它类似于使用
ThreadStatic
关键字,但是当您需要每个线程都有初始化代码时,使用起来更方便,就像您的情况一样

因此,如果你有:

public class MyClass 
{
    public MyClass() 
    {
        // normal constructor, with normal initialization code here.
    }
}
如果您希望每个线程都有一个单独的
MyClass
实例,可以执行以下操作:

ThreadLocal<MyClass> threadSpecificMyClass = new ThreadLocal<MyClass>(() => new MyClass());
ThreadLocal-threadSpecificMyClass=new-ThreadLocal(()=>new-MyClass());
然后,您可以在多个线程之间共享
threadSpecificMyClass
,但调用
threadSpecificMyClass.Value
时,它们都会得到不同的实例。您不必担心检查
null
,因为初始化是自动进行的。

我将使用该类来完成此操作。它类似于使用
ThreadStatic
关键字,但是当您需要每个线程都有初始化代码时,使用起来更方便,就像您的情况一样

因此,如果你有:

public class MyClass 
{
    public MyClass() 
    {
        // normal constructor, with normal initialization code here.
    }
}
如果您希望每个线程都有一个单独的
MyClass
实例,可以执行以下操作:

ThreadLocal<MyClass> threadSpecificMyClass = new ThreadLocal<MyClass>(() => new MyClass());
ThreadLocal-threadSpecificMyClass=new-ThreadLocal(()=>new-MyClass());

然后,您可以在多个线程之间共享
threadSpecificMyClass
,但调用
threadSpecificMyClass.Value
时,它们都会得到不同的实例。您不必担心检查
null
,因为初始化是自动进行的。

非静态类的ThreadStatic实例?您希望它是ThreadStatic,这意味着您的静态类实际上持有状态,否则这无关紧要。如果它保持状态,为什么它是一个静态类?您不能创建一个(静态)属性并为其分配一个新实例吗?然后使属性Threadstatic?@jamesbarras I删除静态类以避免混淆您可以在方法中使用逻辑,该方法检查一些
[Threadstatic]
字段的
null
,如果它是
null
,则执行某些操作并将字段设置为notnull。每个线程都会发生一次。@Reinard:我明白你的意思。它应该可以解决这个问题。一个非静态类的ThreadStatic实例?您希望它是ThreadStatic,这意味着您的静态类实际上持有状态,否则这无关紧要。如果它保持状态,为什么它是一个静态类?您不能创建一个(静态)属性并为其分配一个新实例吗?然后使属性Threadstatic?@jamesbarras I删除静态类以避免混淆您可以在方法中使用逻辑,该方法检查一些
[Threadstatic]
字段的
null
,如果它是
null
,则执行某些操作并将字段设置为notnull。每个线程都会发生一次。@Reinard:我明白你的意思。它应该解决这个问题。