Асинхронная функция. Записывает данные в целевой поток.
Синтаксис
ЗаписатьАсинх(<ДвоичныеДанные>)ЗаписатьАсинх(<ДвоичныеДанные>)Полное описание, параметры и ограничения
ЗаписьДанных.ЗаписатьАсинх (DataWriter.WriteAsync)
ЗаписьДанных (DataWriter)
ЗаписатьАсинх (WriteAsync)
Доступен, начиная с версии 8.3.18.
Вариант синтаксиса: Запись двоичных данных
Синтаксис:
ЗаписатьАсинх(<ДвоичныеДанные>)
Параметры:
<ДвоичныеДанные> (обязательный)
Тип: ДвоичныеДанные.
Записать экземпляр объекта ДвоичныеДанные в поток.
Описание варианта метода:
Записывает в поток данные из объекта типа ДвоичныеДанные.
Вариант синтаксиса: Запись результата чтения данных
Синтаксис:
ЗаписатьАсинх(<ДвоичныеДанные>)
Параметры:
<ДвоичныеДанные> (обязательный)
Тип: РезультатЧтенияДанных.
Записать экземпляр объекта РезультатЧтенияДанных в поток.
Описание варианта метода:
Записывает в целевой поток данные из объекта типа РезультатЧтенияДанных.
Возвращаемое значение:
Тип: Обещание.
Описание:
Асинхронная функция. Записывает данные в целевой поток.
Доступность:
Тонкий клиент, толстый клиент.
См. также:
ЗаписьДанных, метод НачатьЗапись
ЗаписьДанных, метод Записать
Использование в версии:
Доступен, начиная с версии 8.3.18.
Методическая информация
Практические примеры
Асинхронно прочитать часть, преобразовать результат и переписать его в поток
Читаем ABC из ABCDE. Результат обещания чтения ещё не является буфером: отдельно ожидаем получение буфера и двоичных данных.
Где и как запускать
Модуль пустой управляемой формы учебной внешней обработки; тонкий или толстый клиент Windows. Вставьте весь модуль. Это не серверный код.
Подготовка
Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.
В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.
Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.
Пример работает только со своими данными в памяти; записи в базу, файлы и сеть нет.
&НаКлиенте
Асинх Процедура УчебныйПример(Команда)
Данные = ПолучитьДвоичныеДанныеИзСтроки("ABCDE", КодировкаТекста.UTF8, Ложь);
Чтение = Новый ЧтениеДанных(Данные);
Попытка
Часть = Ждать Чтение.ПрочитатьАсинх(3);
Буфер = Ждать Часть.ПолучитьБуферДвоичныхДанныхАсинх();
Двоичные = Ждать Часть.ПолучитьДвоичныеДанныеАсинх();
Сообщить(Часть.Размер = 3 И Буфер.Размер = 3 И Двоичные.Размер() = 3);
Сообщить(ПолучитьСтрокуИзБуфераДвоичныхДанных(Буфер, КодировкаТекста.UTF8) = "ABC");
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Двоичные, КодировкаТекста.UTF8) = "ABC");
Ждать Чтение.ЗакрытьАсинх();
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Поток = Новый ПотокВПамяти;
Запись = Новый ЗаписьДанных(Поток);
Попытка
Ждать Запись.ЗаписатьАсинх(Часть);
Ждать Запись.ЗакрытьАсинх();
Исключение
Запись.Закрыть();
Поток.Закрыть();
ВызватьИсключение;
КонецПопытки;
Копия = Поток.ЗакрытьИПолучитьДвоичныеДанные();
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Копия, КодировкаТекста.UTF8) = "ABC");
КонецПроцедурыРазбор по шагам
Ждать ПрочитатьАсинх(3) даёт РезультатЧтенияДанных с тремя байтами, а не строку ABC.
ПолучитьБуферДвоичныхДанныхАсинх и ПолучитьДвоичныеДанныеАсинх — отдельные операции с собственными обещаниями.
Проверяем размер и содержимое обоих представлений. Для маленького упражнения получение обоих безопасно.
ЗаписатьАсинх принимает сам результат чтения. В новый поток попадает ABC, не весь исходный ABCDE.
Закрываем оболочку записи до извлечения результата из своего потока.
Как проверить результат
Часть, буфер и двоичные данные имеют размер 3; все четыре сообщения Истина.
В восстановленной копии только ABC, букв DE нет.
Ожидаемый результат
Различены Обещание, РезультатЧтенияДанных, БуферДвоичныхДанных и ДвоичныеДанные.
На что обратить внимание
Получение полного буфера загружает часть в память. Не повторяйте оба преобразования для огромного результата без нужды.
Ждать не преобразует двоичные данные в текст автоматически: декодирование UTF-8 выполняется явно.
После закрытия чтения не пытайтесь прочитать оставшиеся DE этим экземпляром.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.