Асинхронный ввод-вывод

Класс Stream (и, соответственно, FileStream) поддерживает два способа выполнения операций ввода-вывода: синхронный и асинхронный. По умолчанию файлы от­крываются в синхронном режиме, то есть последующие операторы выполняются только после завершения операций ввода-вывода. Для длительных файловых опе­раций более эффективно выполнять ввод-вывод асинхронно, в отдельном потоке выполнения1. При этом в первичном потоке можно выполнять другие операции. Для асинхронного ввода-вывода необходимо открыть файл в асинхронном режи­ме, для этого используется соответствующий вариант перегруженного конструк­тора. Асинхронная операция ввода инициируется с помощью метода BeginRead. Помимо характеристик буфера, в который выполняется ввод, в этот метод пере­дается делегат, задающий метод, выполняемый после завершения ввода. Этот метод может инициировать обработку полученной информации, возобно­вить операцию чтения или выполнить любые другие действия, например, прове­рить успешность ввода и сообщить о его завершении. Обычно в этом методе вы­зывается метод EndRead, который завершает асинхронную операцию. Аналогично выполняется и асинхронный вывод. В листинге 11.2 приведен при­мер асинхронного чтения из файла большого объема и параллельного выполне­ния диалога с пользователем.

ПРИМЕЧАНИЕ

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

Работа с потоками выполнения рассматривалась в предыдущей главе.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: