Больше отзывчивости, больше клиентов. Больше клиентов, больше прибыли. Следовательно, чем больше отзывчивость, тем больше прибыль. В этой статье я расскажу, как повысить скорость отклика ваших приложений с помощью асинхронного программирования с использованием C# и платформы asp.net. Прежде чем приступить к чтению этой статьи, возможно, будет лучше прочитать предыдущие статьи из этой серии кратких сведений об асинхронности. Вы можете найти их здесь".

Есть два основных преимущества асинхронного программирования. Первое преимущество заключается в том, что в клиентских приложениях вы можете обеспечить быстродействие с помощью асинхронного программирования. Представьте, что вы берете телефон и открываете свое любимое приложение. Затем вы нажимаете кнопку, которая делает запрос через Интернет для некоторых данных, и пользовательский интерфейс блокируется до тех пор, пока не будет получен ответ. Это снижает пользовательский опыт, и вы потенциально теряете клиентов. Вы можете избавиться от этого блокирующего поведения, используя асинхронное программирование.

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

Как я упоминал в предыдущей статье, писать асинхронный код непросто. Но последние фреймворки сделали это почти таким же простым, как написание обычного синхронного кода. В этой серии я использую C# и платформу asp.net, чтобы объяснить, как писать асинхронный код.

Когда вы собираетесь писать асинхронный код на C#, вы должны учитывать 4 основных момента. (Есть много вещей, которые следует учитывать, но для лучшего понимания я обобщил их в 4 основных пункта.)

  1. асинхронный оператор
  2. ждите оператора
  3. Тип возвращаемого значения Задача
  4. Имя метода

Здесь я включил краткое обсуждение предыдущих пунктов. Если вы новичок в асинхронном программировании на C#, то, скорее всего, вы не сразу поймете, что я сказал. Поэтому, пожалуйста, читайте спокойно и переходите к следующей статье, где я объяснил эти моменты на примерах из реальной жизни.

асинхронный оператор

У оператора async два основных назначения. Первый — это асинхронный оператор, который позволяет использовать оператор await внутри метода. Второй — асинхронный оператор, преобразующий асинхронный метод в конечный автомат, который я не буду подробно обсуждать в этой статье. К вашему сведению, конечный автомат — это что-то вроде переключателя, который может устанавливать свое состояние относительно некоторого значения. Представьте себе оператор switch в C# или любом другом предпочитаемом вами языке. Государственная машина тоже что-то в этом роде. О государственной машине поговорим позже в другой статье.

оператор ожидания

Подобно оператору async, оператор await имеет две основные цели. Во-первых, оператор await сообщает компилятору, что метод, содержащий оператор await, не может продолжать работу без завершения асинхронной задачи. Во-вторых, оператор await возвращает управление вызывающей стороне.

Тип возврата задачи

В отличие от синхронных методов, здесь мы не возвращаем простой тип данных, такой как Integer, String, Boolean или экземпляр какого-либо класса. Здесь мы возвращаем Task или Task‹T›, где T — целое число, строка, логическое значение или любой другой класс. Задача чем-то похожа на обещание. (Не путайте это с JS-обещаниями, которые вы уже знаете) Обещание, которое говорит: Некоторое время спустя я верну результат либо без данных, либо с каким-то другим типом данных. Если мы ничего не возвращаем внутри нашего асинхронного метода, мы можем просто использовать Task в качестве возвращаемого типа. Если мы собираемся что-то вернуть, мы можем использовать задачи универсального типа Task‹T›, где T — тип данных, который мы собираемся вернуть. Помните, что мы не можем вернуть пустоту внутри асинхронного метода, если только он не является обработчиком событий. Если это обработчик события, мы можем просто вернуть void.

Подпись метода

Это не обязательно, когда вы пишете асинхронный метод. Но это лучшая практика, которую вы можете использовать для написания чистого кода. (Это действительно хорошая статья, которую вы можете прочитать о важности написания чистого кода). Когда мы пишем асинхронный метод, мы добавляем Async в конец имени метода. Примером асинхронной версии DownloadWebPage() является DownloadWebPageAsync().

Если у вас есть практический опыт работы с C#, вы можете получить то, что я объяснил выше. Даже если у вас не так много опыта, вы сможете лучше понять асинхронное программирование, прочитав следующую статью из этой асинхронной серии в двух словах. Там я объясню эти моменты, используя простое приложение WPF, которое загружается и показывает веб-сайт с помощью веб-запроса.