В этой статье мы рассмотрим ключевые слова «async» и «await» в C #. Давай займемся этим!

Вступление

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

Задания

Чтобы добиться асинхронного программирования с помощью C #, нам необходимо знать Задачи.

Задача представляет собой асинхронную операцию. Это операция, которую мы хотим выполнить, и она выполняется в фоновом режиме. Задача - это что-то вроде обещания или будущего, в котором говорится что-то вроде «Я верну это немного позже ». Задачи можно объединить в цепочку для выполнения одна за другой.

Задачу не следует путать с Темой. Тема - это концепция нижнего уровня. Thread - это способ выполнить обещание, но не для каждой Task требуется совершенно новый Thread. Задача может возвращать результат, в то время как нет прямого механизма для возврата результата из Thread.

Если мы знакомы с обещаниями JavaScript, задачи совершенно такие же.

Пример и объяснение

Представим себе следующий код:

private async void Button_Click(object sender, RoutedEventArgs e)
{
    textBox.Text = "Wait...";
    // ... DOING SOME OPERATIONS
    string result = await SimpleMethodAsync();
    textBox.Text = result;
}
public async Task<string> SimpleMethodAsync()
{
    // ... DOING SOMETHING
    await Task.Delay(2000);
    return "Finished";
}

Как мы видим, здесь мы используем три слова, о которых уже упоминали: «async», «await», «Task». Итак, что здесь происходит? Мы видим, что мы используем ключевое слово «async» перед методом «Button_Click ()». В нем говорится, что мы определяем асинхронный метод. Это также означает, что мы можем чего-то ждать. Итак, когда вызывается метод «Button_Click ()» в ответ на событие щелчка, он выполняется синхронно, пока не достигнет ключевого слова «await». К этому времени будет вызван «SimpleMethodAsync ()», и, если можно будет выполнить другую независимую работу, он будет запущен. Ключевое слово «await» сообщает компилятору, что нам в конечном итоге нужен результат метода «SimpleMethodAsync ()», но нам не нужно блокировать этот вызов.

Перед «SimpleMethodAsync ()» также стоит ключевое слово «async». Этот метод возвращает строку, и мы указываем ее с типом возвращаемого значения «Task ‹string›». После нашего оператора return метод «Button_Click ()» может получить результат.

Важное замечание: хотя возврат «void» в методе «async» разрешен, его не следует использовать в большинстве случаев. Два других типа возвращаемых значений, «Task» и «Task ‹T›», представляют «void» и «T ”после завершения метода awaitable и возврата результата. Использование void в качестве возвращаемого типа должно быть ограничено только для обработчиков событий.

Другими словами

Ключевое слово «async» включает ключевое слово «await» в методе и изменяет способ обработки результата метода. Метод «async» выполняется, как и любой другой метод, синхронно, пока не достигнет ключевого слова «await». На этом этапе все становится асинхронным. «await» принимает единственный аргумент, «awaitable», то есть асинхронную операцию. «await» проверяет, завершился ли «awaitable», и если это так, метод просто продолжает синхронно. В противном случае он сообщает «awaitable» о необходимости выполнить оставшуюся часть метода по завершении, а затем возвращается из метода «async». По завершении «awaitable» выполняется оставшаяся часть метода «async».

Заключение

В этой статье мы увидели значение ключевых слов «async» и «await» в C #. У нас был базовый обзор того, как работают асинхронные операции и как мы можем их использовать.

Последнее слово

Если вам понравилась эта статья, вы можете поддержать и помочь мне на Patreon! Это было бы замечательно! В противном случае вы можете найти другие мои сообщения на Medium и Tumblr. Вы также узнаете обо мне больше на моем личном сайте. До следующего раза, счастливая головная боль!