Case 2 will be completed. A field, property, or method of a class cannot be dereferenced until the type is initialized and the type is initialized until the static constructor completes. The static constructor, as far as I know, is a blocking call.
http://msdn.microsoft.com/en-us/library/aa645612(v=vs.71).aspx
"The static constructor for the class runs no more than once in the specified application domain.
See this answer from Eric Lippert: fooobar.com/questions/71516 / ... and note that "cctor" is the IL for the static constructor.
No clickers call MyMethod directly or indirectly! Can I now call a static method, such as MyMethod, before it finishes working with the MyClass instructor?
No.
Is this true even if multiple threads are involved?
Yes. The coctor will terminate on a single thread before the static method can be called on any thread.
Is it possible to call cctor more than once? Suppose two threads make cctor work.
It is guaranteed that cctor will be called no more than once, no matter how many threads are involved. If two threads call MyMethod "at the same time," then they race. One of them loses the race and blocks until the MyClass circuit finishes on the winning thread.
Haney source share