多线程和静态构造函数

本文关键字:构造函数 静态 多线程 | 更新日期: 2023-09-27 18:11:46

假设我有以下类:

class Dummy
{
    public static Dictionary<int, int> dict = new Dictionary<int, int>();  // (1)
    static Dummy()   // (2)
    {
        dict.Add(1, 100);
        dict.Add(2, 200);
    }        
}

此类型将被多个线程访问。第(1)和(2)项将于何时执行?它们会对每个线程执行吗?是否可能出现键重复异常?

多线程和静态构造函数

无论何时创建第一个实例,都将访问它们。没有复制密钥的机会。它们只会发生一次。如果在处理静态构造函数时发生错误,将无法再次访问它。

请参阅下面JohnSaunders的注释,以了解此调用的原子性