在静态 ctor 完成运行之前(在多线程环境中),是否有可能创建类(常规 ctor)的实例?



我有一个静态 ctor 从我的配置服务器获取配置并设置静态变量。

我有一个常规的 ctor 根据该配置实例化一些属性。

这是我的班级示例:

public class MyClass
{
   private static MyConfig _config;
   private UnitOfWork _uow;
   static MyClass(){
        // This takes some time since it's a web service call!!!
        _config = ConfigService.GetConfig(); 
   }
   public MyClass(){
        _uow = CreateUow(_config.UOWConnectionString);
   }
   public Response DoSomething(){
       // logic with _uow
   }
}

假设我有一个接收多个请求的 WCF 服务,则每个请求都会实例化MyClass并运行 DoSomething 方法。

静态 ctor 执行 Web 服务调用,该调用需要一些时间才能获得结果。

我能否确定静态 ctor 将在任何请求收到 MyClass 实例之前完成运行?

我知道静态 ctor 是线程安全的。

静态 ctor 完成运行之前创建新实例是否有任何锁定?

静态构造函数保证在创建任何实例之前运行。来自MSDN。

自动调用静态构造函数来初始化类 在创建第一个实例或任何静态成员之前 引用。

相关内容

最新更新