var firstTask = DoSomethingAsync();
Заставляет ли это выполнение задачи?
Да. Это было лучше! DoSomethingAsync
обещает от своего имени сделать что-то асинхронно, поэтому, если он не передает вам исполняемую задачу, то ее имя является ложью.
Как выполнить выполнение на следующей строке для вызова второй задачи?
Непонятный вопрос.
Я думал, что это синхронно без выражения ожидания.
Ваши убеждения неверны. «Ожидание» не означает «сделать это асинхронным». Не ждать создания и уничтожения асинхронности; он просто управляет существующей асинхронностью. DoSomethingAsync
is уже асинхронный независимо от любого await
. Опять же, говорит, что он делает что-то асинхронно, так что лучше быть тем, чем он занимается!
await
в вашем примере всего return
. Это означает «вернуться к моему абоненту и снова запустить этот метод в будущем после того, как ожидаемая задача будет завершена». Это асинхронное ожидание .
Подумайте, await
как быть yield return
. Когда вы находитесь в блоке итератора, и вы сталкиваетесь с возвратом доходности, метод возвращается, а затем он забирает место, где он остановился в какой-то момент в будущем. await
в основном то же самое; только механизмы немного отличаются.
Еще один способ подумать, что await
отмечает точку, где текущий метод не может продолжаться до тех пор, пока ожидаемая задача не будет завершена.. Поскольку метод не может продолжать работать, он возвращается.
Снова, await
ничего не делает позвонил по правой стороне. Это просто оператор, и он подчиняется всем обычным правилам операторов:
await Foo();
и
var blah = Foo();
await blah;
одно и то же, так же, как
var x = Foo() + Bar();
и
var f = Foo();
var b = Bar();
var x = f + b;
- это то же самое. Ожидание не делает что-то магическое для его операндов, не более +
делает что-то волшебное для своих операндов. Это просто особый вид возвращения.
Кроме того, делает ли этот код то же самое?
Пожалуйста, не задавайте два вопроса в одном вопросе. Отправьте два вопроса, если у вас есть два вопроса.
Вопрос неясен. Семантика обоих рабочих процессов заключается в том, что задача, возвращаемая RunConcurrentTasks, сигнализируется как завершаемая, когда выполняются все дочерние задачи, если это то, о чем вы просите.
@Igor так что этот код: 'вар firstTask = DoSomethingAsync(); var secondTask = DoSomethingElseAsync(); 'вызывает вызов каждой задачи и начало ее выполнения? Как бы я сделал это синхронно, если бы захотел? –
Если у вас есть новый вопрос «как запустить синхронный метод асинхронизации», пожалуйста, задайте его как вопрос (очевидно, все стандартные требования применяются). Невозможно понизить комментарий из-за отсутствия исследований ... –