Создание потоков в статических конструкторах
В следующем примере кода показано, что поток, созданный в статическом конструкторе, запускается только после завершения выполнения статического конструктора. В этом случае это приводит к тому, что статический конструктор никогда не завершает работу из-за ожидания.
Что тут происходит?
using System;
using System.Threading;
static public class Test
{
static public bool isDone = false;
static Test()
{
Thread a = new Thread(TestThread);
a.Priority = ThreadPriority.Highest;
a.Start();
while (!isDone)
Thread.Sleep(1);
Console.WriteLine(isDone);
}
static private void TestThread()
{
isDone = true;
}
}
1 ответ
Решение
РЕДАКТИРОВАТЬ: я писал бессмысленно. Статические конструкторы выполняются под блокировкой, чтобы несколько потоков не могли инициализировать статический класс более одного раза. Однако вы пытаетесь получить доступ к своему классу из нескольких потоков до завершения этой инициализации, поэтому ваш код приводит к тупику. Смотрите объяснение здесь