Являются ли следующие блоки кода эквивалентными, если они выполняются в потоке пользовательского интерфейса?
Нет, это не так. Первый будет блокировать поток пользовательского интерфейса / Message Pump , второй не будет.
Первый пытается запустить метод async
Синхронно и завершится неудачно при любом просмотре вменяемого кода (во всех случаях, кроме самых редких обстоятельств). Первый пример должен быть изменен, чтобы быть вторым примером ИМХО
Создает задачу и «ждет» ее так же, как что-то запускает
синхронно?
Если вы определяете Синхронный код как " Набор операторов в последовательности; таким образом, каждый оператор в вашем коде выполняется один за другим, и перед ожиданием нет кода ». Тогда вы можете сделать это требование.
Однако, если вы сделаете что-то подобное, то нет
var task = Task.Run(SomeAwesomeTask);
// lots more code here
task.Wait();