我有多个线程使用相同的静态类和长时间运行的静态构造函数。
我能否确定,只有在完成对静态类的调用后才能使用所有线程中此类的同时用法。由其中一个线程引起的构造函数?
答案 0 :(得分:3)
是的,绝对的。这由C#规范第10.12节保证。我试图找到一个更明确的位来讨论线程,因为该部分只保证它将被执行一次。
请注意,如果你有一种“递归初始化”设置,你仍然可以在完全初始化之前在一个类中执行代码 - 如果两个静态构造函数相互依赖,那么你最终可以如果每个类在不同的线程中初始化,则会出现死锁。
另请注意,静态构造函数的存在会影响静态字段初始值设定项的时间 - 如果没有静态构造函数,则可以使CLR在初始化字段时有更多余地。 (实际行为随着时间的推移而发生变化,但始终在规范范围内。)有关静态字段初始值设定项的更多信息,请参见规范10.5.5.1节。
基本上,尽可能保持静态构造函数的简单和自包含。