Найти тему
.Net Review

Асинхронное программирование в C#. Часть 1

Оглавление

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

Что это?

Асинхронность в программировании — выполнение процесса в неблокирующем режиме системного вызова, что позволяет потоку программы продолжить обработку.

Как использовать?

Необходимо при написании заголовка метода, после модификатора доступа дописать ключевое слово async. В качестве возвращаемого типa может быть: void, Task, Task<type>, ValueTask<type>. Такой метод говорит нам, что может содержать блоки кода, которые будут вызываться асинхронно при использовании await.

Пример

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

Ниже представлен класс пользовательского интерфейса.

-2

Далее реализуем отображение данных из файла, которые представлены классом FileService.

-3

Осталось вызвать данные методы в классе Program.

-4

Какова будет последовательность вывода данных? В первую очередь отобразится информация из метода userInterface.ShowUI(), далее создается экземпляр класса FileService и запускается метод userInterface.LoadingCommand, в который передается делегат, метод отображения данных из файла. Внутри метода ShowDataFromFileAsync запускается асинхронно получение данных и потом отображается. Следовательно работа метода Main в классе Program продолжится и мы не можем сказать точно, что выполнится быстрее отображение сообщения в методе Main, или асинхронное получение данных. Результат:

-5

В данном случае после того, как мы получили и отобразили данные закончился метод Main и вывел сообщение, а потом закончился метод LoadingCommand.

Спасибо за внимание!

Телеграмм канал: https://t.me/dotnetreview

Наука
7 млн интересуются