Почему пустая задача .NET не завершается, если она была запущена и ожидалась от статического конструктора?

Я не могу понять, почему следующий код не будет работать:

var task = new Task(() => { });
task.Start();
if (task.Wait(10000))
{
   logger.Info("Works");
}
else
{  
   logger.Info("Doesn't work");
}

По истечении тайм-аута статус задачи застрял на «Выполняется», хотя ничего не поделаешь. Однако замена task.Start () на task.RunSynchronously () будет работать.

Есть ли у кого-нибудь представление о том, что я делаю неправильно?

Тестовый проект по воспроизведению проблемы доступен здесь: http://erwinmayer.com/dl/TaskTestProject.zip . Насколько я понимаю, это не работает, если метод с приведенным выше кодом выполняется в статическом конструкторе. Но он работает, если вызывается напрямую как метод статического класса.

В этом недавнем сообщении в блоге MSDN, похоже, освещены проблемы, связанные со статическими конструкторами: http://blogs.msdn.com/b/pfxteam/archive/2011/05/03/10159682.aspx

6
задан Erwin Mayer 5 November 2012 в 08:40
поделиться