Я новичок в асинхронном программировании на c # и прочитал несколько хороших статей по этому вопросу (см. здесь , здесь и здесь для примеров).Я думаю, что у меня есть понимание того, как это работает, но я надеюсь, что кто-то может подтвердить, что я на правильном пути.
Если я правильно понимаю, асинхронное программирование работает так:
Добавьте ключевое слово async к методу, чтобы указать, что оно отойдет и сделает свое дело, независимо от того, что делает остальная часть программы.Это в основном похоже на то, как шеф-повар просит повара приготовить грибы, лук и морковь.
Асинхронный метод назначается типовой задаче.Задача - это метод, который выполняется, или, в нашем случае, это приготовление пищи.Тип возврата - это тип, который будет возвращать Задача.После того, как задача назначена, текущий метод игнорирует ее, зная, что она выполняется.
Команда await - это место, где вызывающий метод запрашивает результаты задачи.Чтобы продолжить наш пример, шеф-повар просит приготовителя приготовить нарезанные овощи.Если задание выполнено, выдается результат, и вызывающий метод продолжает выполняться.Если задача еще не завершена, вызывающий метод должен дождаться ее завершения.Другими словами, если приготовитель еще не закончил нарезать овощи к тому времени, когда шеф-повар нуждается в них, шеф-повар должен подождать, прежде чем он сможет продолжить готовить рецепт.(Я знаю, что метафора здесь разрушается, потому что настоящий шеф-повар ушел бы и сделал что-то еще, но это только для упрощения объяснения.)
Чтобы использовать команду await, метод должен быть асинхронным методом,В приведенном выше примере вызывающий метод является асинхронным методом.Таким образом, когда он нажимает на команду await, управление возвращается к своему вызывающему методу, который будет продолжать работать, пока не завершит или не встретит собственное ожидание.
Итак, теперь у нас есть метод A, который вызывает асинхронный метод B, который вызывает асинхронный метод C. Метод B останавливается в ожидании, ожидая результатов от метода C. Оба метода A и C работают асинхронносейчас, пока метод B ждет результатов.Как только метод C вернет результаты, метод A и B будут работать асинхронно до тех пор, пока либо метод B не завершится, либо метод A не решит, что ему нужно ожидать результатов от метода B. Обратите внимание, что метод B может не нуждаться в возврате результатов, поэтому метод A можетзавершить до выполнения метода B.
Правильно ли это звучит, или управление переместится с A на B, а затем вернется к A только тогда, когда будет нажата кнопка ожидания?Таким образом, если у A нет своего собственного ожидания, он завершит работу до того, как контроль вернется к B.
Я понимаю, что упрощаю это, когда намного больше сложностей, но я пытаюсь понять,понятия перед тонкостями.