В моем предыдущем блоге мы рассмотрели несколько практических примеров использования асинхронного программирования. В этом блоге мы рассмотрим, как асинхронность реализуется в .NET с помощью async/await. Фрагмент кода ниже описывает процесс (слишком упрощен для лучшего понимания).

История двух потоков: thread_1 и thread_2

(Предположим, что код работает на одноядерном процессоре)

В приведенном выше фрагменте кода ключевыми моментами являются:

  1. Ключевое слово «async» включает ключевое слово «await» в этом методе.
  2. Метод выполняется синхронно, пока не столкнется с "ожиданием" или (если возникнет исключение).
  3. Без ключевого слова «ожидание» Task.Delay(5000) будет выполняться синхронно, как обычные методы.
  4. Забавный факт! Компилятор делает это асинхронно, используя конечный автомат. В результате, когда thread_1 вызывается во второй раз, он знает, с чего продолжить выполнение.
  5. «Await» принимает единственный аргумент, который называется «awaitable». Это ожидаемое действие является асинхронной операцией, например Task.Delay(5000). Существует два типа ожидаемых объектов: Task‹T› и Task
  6. Асинхронные методы могут возвращать Task‹T›, Task или void в некоторых исключительных случаях (например, void используется для обработчиков асинхронных событий).

Ожидаемые

Как упоминалось выше, «ожидание» принимает один аргумент, называемый «ожидаемым», который является асинхронной операцией. Ожидаемые объекты бывают двух типов:

  1. Задача‹Т›
  2. Задача

Примечание. Это означает, что вы можете ожидать результата любого метода (как асинхронного, так и синхронного), если метод возвращает задачу.

Для простого и короткого асинхронного метода избегайте async/await.

Вместо этого используйте неасинхронный метод, возвращающий Task.FromResult. Это более эффективно, чем использование async/await.
Например, метод извлекает значение из локального кеша (не операция ввода-вывода).

Я надеюсь, что вы нашли эту статью полезной. В моей следующей статье мы обсудим последствия переключения контекста в асинхронном программировании. Мы также обсудим рекомендации по предотвращению переключения контекста без необходимости. Спасибо!