У меня есть следующий простой код:Task.Wait() никогда не возвращается при вызове во время инициализации статического поля?
class Program
{
public static readonly List<int> Years = BuildList();
static void Main(string[] args) { }
private static List<int> BuildList()
{
var t = Task.Run(() => x());
t.Wait();
return new List<int>();
}
private static void x()
{
Console.WriteLine("Hello World");
}
}
После отладки, x()
никогда не введенный и t.Wait()
никогда не завершает/возврат и вешает навсегда. Может ли кто-нибудь объяснить это странное поведение?
Не похоже, что есть блокирующие вызовы для пользовательского интерфейса, все, что я могу догадаться, это то, что threadpool как-то максимизирован?
Если я удаляю звонок .Wait()
, то x()
в конце концов будет введен.
Обратите внимание, что вызов BuildList()
от Main
работает отлично.
Информация о Needz moar – Liam
Это, безусловно, не то, что вы на самом деле делаете, если это то, что вы видите. Вам нужно предоставить пример, который действительно способен воспроизвести вашу проблему. Кроме того, вы никогда не должны использовать конструктор 'Task', когда-либо. Используйте «Task.Run», если вы хотите запустить новую «Задачу», которая представляет выполнение работы в потоке пула потоков. – Servy
«Это не похоже на блокировку вызовов UI» ... 't.Wait'_is_ блокирует ваш основной поток. И 't.Start()' только назначает задачу, но для этого не использует другой поток. –