Будет ли этот фрагмент кода начинать извлечение третьего документа или ждать, пока первый документ будет заархивирован?
Это ждет. Смысл статьи в том, чтобы описать, как поток управления работает с преобразованием, а не в действительности описать наилучшую возможную систему для управления операцией выборки-архивирования.
Предположим, у вас есть сотни документов для извлечения и архивирования, и вам действительно все равно, в каком порядке они произошли. (*) Вы можете создать новый асинхронный метод "FetchAndArchive", который извлекает один документ асинхронно, а затем архивирует его. асинхронно. Затем вы могли бы вызывать этот метод сто раз из другого асинхронного метода, который выполняет сто задач, каждая из которых асинхронно извлекает документ и архивирует его. Результатом того метода является комбинированная задача, представляющая работу по выполнению этих сотен задач, каждая из которых представляет работу по выполнению двух задач.
В этом сценарии, когда одна из операций выборки не может сразу получить свой результат, может быть запущена одна из задач, которая готова выполнить шаг архивирования.
Я не хотел вдаваться в комбинаторы задач в этой статье; Я хотел сосредоточиться на более простом потоке управления.
(*) Вас может волновать, в каком порядке они произошли, если вместо «загрузить документ и заархивировать его» операция была «получить следующее видео в этой серии и воспроизвести его». Вы не хотите воспроизводить их не по порядку, даже если они могут более эффективно поступать не по порядку. Скорее, вы хотите загрузить следующий, пока проигрывается текущий.