C# 静态构造函数及其类的同时使用

C# 静态构造函数及其类的同时使用,c#,.net,static,C#,.net,Static,可能重复: 我有多个线程使用同一个静态类和长时间运行的静态构造函数 我可以确定,只有在完成由一个线程引起的对静态类构造函数的调用后,才能从所有线程同时使用该类吗?是的,绝对可以。这由C#规范第10.12节保证。我试图找到一个更明确的关于线程的部分,因为该部分只保证执行一次 请注意,如果您有一种“递归初始化”设置,您仍然可以在类完全初始化之前在类中执行代码——如果两个静态构造函数相互依赖,那么如果每个类在不同的线程中初始化,则可能会导致死锁 还请注意,空静态构造函数的存在可能会影响静态字段初始值

可能重复:

我有多个线程使用同一个静态类和长时间运行的静态构造函数


我可以确定,只有在完成由一个线程引起的对静态类构造函数的调用后,才能从所有线程同时使用该类吗?

是的,绝对可以。这由C#规范第10.12节保证。我试图找到一个更明确的关于线程的部分,因为该部分只保证执行一次

请注意,如果您有一种“递归初始化”设置,您仍然可以在类完全初始化之前在类中执行代码——如果两个静态构造函数相互依赖,那么如果每个类在不同的线程中初始化,则可能会导致死锁

还请注意,空静态构造函数的存在可能会影响静态字段初始值设定项的计时-如果没有静态构造函数,则CLR在初始化字段时会有更多的回旋余地。(实际行为随时间变化,但始终在规范范围内。)有关静态字段初始值设定项的更多信息,请参阅规范第10.5.5.1节

基本上,尽可能保持静态构造函数简单且自包含