Асинхронная функция. Читает один байт из потока.
Синтаксис
ПрочитатьБайтАсинх()Полное описание, параметры и ограничения
ЧтениеДанных.ПрочитатьБайтАсинх (DataReader.ReadByteAsync)
ЧтениеДанных (DataReader)
ПрочитатьБайтАсинх (ReadByteAsync)
Доступен, начиная с версии 8.3.18.
Синтаксис:
ПрочитатьБайтАсинх()
Возвращаемое значение:
Тип: Обещание.
Результат выполнения обещания - прочитанный байт типа Число.
Если не удалось прочитать байт из-за того, что был достигнут конец потока, результатом выполнения обещания будет значение Неопределено.
Описание:
Асинхронная функция. Читает один байт из потока.
Доступность:
Тонкий клиент, толстый клиент.
См. также:
ЧтениеДанных, метод НачатьЧтениеБайта
ЧтениеДанных, метод ПрочитатьБайт
Использование в версии:
Доступен, начиная с версии 8.3.18.
Методическая информация
Практические примеры
Асинхронно записать и прочитать четыре числовых поля по порядку
Полный клиентский обработчик использует Ждать для каждой операции. Чтение начинается только после закрытия записи и получения данных.
Где и как запускать
Модуль пустой управляемой формы учебной внешней обработки; тонкий или толстый клиент Windows. Вставьте весь модуль. Это не серверный код.
Подготовка
Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.
В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.
Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.
Пример работает только со своими данными в памяти; записи в базу, файлы и сеть нет.
Имя кнопки формы должно быть КнопкаУчебныйПример. Если назвали иначе, переименуйте кнопку в дереве элементов формы.
Доступность меняется у кнопки, не у команды. На время ожидания кнопка отключена для защиты от повторного запуска.
&НаКлиенте
Асинх Процедура УчебныйПример(Команда)
Элементы.КнопкаУчебныйПример.Доступность = Ложь;
Поток = Новый ПотокВПамяти;
Запись = Новый ЗаписьДанных(Поток);
Попытка
Ждать Запись.ЗаписатьБайтАсинх(7);
Ждать Запись.ЗаписатьЦелое16Асинх(4660, ПорядокБайтов.LittleEndian);
Ждать Запись.ЗаписатьЦелое32Асинх(16909060, ПорядокБайтов.BigEndian);
Ждать Запись.ЗаписатьЦелое64Асинх(4294967296, ПорядокБайтов.LittleEndian);
Ждать Запись.СброситьБуферыАсинх();
Ждать Запись.ЗакрытьАсинх();
Исключение
Запись.Закрыть();
Поток.Закрыть();
Элементы.КнопкаУчебныйПример.Доступность = Истина;
ВызватьИсключение;
КонецПопытки;
Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
Чтение = Новый ЧтениеДанных(Данные);
Попытка
Версия = Ждать Чтение.ПрочитатьБайтАсинх();
Поле16 = Ждать Чтение.ПрочитатьЦелое16Асинх(ПорядокБайтов.LittleEndian);
Поле32 = Ждать Чтение.ПрочитатьЦелое32Асинх(ПорядокБайтов.BigEndian);
Поле64 = Ждать Чтение.ПрочитатьЦелое64Асинх(ПорядокБайтов.LittleEndian);
Конец = Ждать Чтение.ПрочитатьБайтАсинх();
Сообщить(Данные.Размер() = 15);
Сообщить(Версия = 7 И Поле16 = 4660 И Поле32 = 16909060 И Поле64 = 4294967296);
Сообщить(Конец = Неопределено);
Ждать Чтение.ЗакрытьАсинх();
Исключение
Чтение.Закрыть();
Элементы.КнопкаУчебныйПример.Доступность = Истина;
ВызватьИсключение;
КонецПопытки;
Элементы.КнопкаУчебныйПример.Доступность = Истина;
КонецПроцедурыРазбор по шагам
Асинх ставится у клиентской процедуры. Ждать извлекает результат обещания; без него переменная содержала бы Обещание, а не число.
Четыре записи выполняем последовательно, не запускаем параллельные операции над одним потоком.
Сбрасываем буферы, закрываем запись, затем закрываем свой ПотокВПамяти с получением данных.
Читаем поля теми же ширинами и порядками байтов, после них проверяем конец дополнительным байтовым чтением.
Синхронное закрытие в исключении допустимо именно в указанном клиенте Windows; веб-клиент для этого модуля не заявлен.
Как проверить результат
Три контрольных сообщения Истина; пакет 15 байтов, версия 7.
После окончания/обрабатываемой ошибки кнопка снова доступна. В рабочую базу записи нет.
Ожидаемый результат
Завершён последовательный асинхронный цикл записи и чтения учебного пакета.
На что обратить внимание
Асинхронные методы этой группы доступны на клиенте, не на сервере.
Асинх не делает операции потокобезопасными. Два одновременных чтения одного экземпляра не нужны.
Не используйте пример как универсальную реализацию для браузера: подготовка ограничена Windows-клиентом.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.