«любой поток, ожидающий завершения этого потока» относится к любому потоку, ожидающему , использующему блокировки инициализации для статических потоков , а не к потоку, ожидающему с использованием какого-либо возможного механизма синхронизации.Механизм статической инициализации не может знать, что какой-то другой поток ожидает , используя какой-то совершенно другой механизм в другом потоке.
В цитируемом разделе говорится о том, что приведенный ниже пример выиграл'deadlock:
public class A
{
static A()
{
Thread.Sleep(TimeSpan.FromSeconds(1));
B.DoNothing();
}
public static void DoNothing() { }
}
public class B
{
static B()
{
Thread.Sleep(TimeSpan.FromSeconds(1));
A.DoNothing();
}
public static void DoNothing() { }
}
private static void Main()
{
Task.Run(() => B.DoNothing());
A.DoNothing();
}
В этом примере не происходит взаимоблокировка, поскольку один поток ожидает, пока другой поток освободит статическую блокировку инициализатора, поэтому, когда этот поток завершает запрос статической блокировки инициализатора, исходный потокимеет, цитируемый пункт вступает в силу, и он просто пропускает блокировку.