Создание задачи и «ожидание» - это то же самое, что синхронное выполнение чего-либо или ожидание асинхронного метода? - PullRequest
0 голосов
/ 22 января 2019

Являются ли следующие блоки кода эквивалентными, если они выполняются в потоке пользовательского интерфейса?

var task = Task.Run(async () => { await DoSomething(); });
task.Wait();

против

await DoSomething(); //Or DoSomething.Wait();

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Создание задачи и «ожидание» - это то же самое, что синхронный запуск чего-либо?

Следующий код: создание задачи, создание нового потока и запуск кода в новом потоке.

var task = Task.Run(async () => { await DoSomething(); });

Важно знать, что все это происходит .

Принимая подпись:

async Task DoSomething()

Все приведенные ниже утверждения принципиально отличаются:

Task.Run(async () => { await DoSomething(); });
await DoSomething(); 
DoSomething().Wait();

Не думаю, что я мог бы вдаваться в подробности обо всех этих (это много деталей), но у Стивена Клири есть довольно много постов, посвященных этой детали ( Асинхронизация и ожидание , Обзор задачи, часть 1: Конструкторы Не использовать Task.Run в реализации и Нет потока ).

0 голосов
/ 22 января 2019

Являются ли следующие блоки кода эквивалентными, если они выполняются в потоке пользовательского интерфейса?

Нет, это не так. Первый будет блокировать поток пользовательского интерфейса / Message Pump , второй не будет.

Первый пытается запустить метод async Синхронно и завершится неудачно при любом просмотре вменяемого кода (во всех случаях, кроме самых редких обстоятельств). Первый пример должен быть изменен, чтобы быть вторым примером ИМХО

Создает задачу и «ждет» ее так же, как что-то запускает синхронно?

Если вы определяете Синхронный код как " Набор операторов в последовательности; таким образом, каждый оператор в вашем коде выполняется один за другим, и перед ожиданием нет кода ». Тогда вы можете сделать это требование.

Однако, если вы сделаете что-то подобное, то нет

var task = Task.Run(SomeAwesomeTask);

// lots more code here

task.Wait();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...