Я столкнулся с некоторым странным поведением при использовании класса .Net 4 System.Threading.Tasks .Лучше всего продемонстрировать этот пример:
var t = FunctionThatReturnsTaskAsync();
Trace.TraceInformation("Completed: " + t.IsCompleted);
return t.Result;
Вывод: " Завершено: true ", но код (один раз в несколько тысяч запусков) затем блокируется в t.Result навсегда.Он не возвращает и не генерирует исключение.Как это может быть!
Возвращаемое задание выполняется в несколько раз быстрее, поэтому неудивительно, что оно может быть выполнено во второй строке.Загадка в том, почему t.Result блокируется.