Я не могу понять, почему следующий код не будет работать:
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