GetDataAsync().Result;
будет выполняться, когда задача, возвращаемая GetDataAsync()
, завершается, тем временем она блокирует поток пользовательского интерфейса return result.ToString()
]) помещается в очередь потока UI для выполнения GetDataAsync()
, будет завершена, когда будет запущено его очередное продолжение Тупик может быть нарушен предоставленными альтернативами, чтобы избежать Факт 1 или Факт 2.
var data = await GetDataAsync()
, который позволяет потоку пользовательского интерфейса продолжать работать var data = Task.Run(GetDataAsync).Result
, который выведет продолжение в контекст синхронизации потока threadpool. Это позволяет завершить задачу GetDataAsync()
. Это очень хорошо объясняется в статье Стивена Тууба , примерно наполовину вниз, где он использует пример DelayAsync()
.