Асинхронная функция. Копирует заданное количество байтов из объекта ЧтениеДанных в указанный поток или объект ЗаписьДанных. Если количество не указано, копируются все данные из объекта.
Синтаксис
КопироватьВАсинх(<Поток>, <Количество>)Полное описание, параметры и ограничения
ЧтениеДанных.КопироватьВАсинх (DataReader.CopyToAsync)
ЧтениеДанных (DataReader)
КопироватьВАсинх (CopyToAsync)
Доступен, начиная с версии 8.3.18.
Синтаксис:
КопироватьВАсинх(<Поток>, <Количество>)
Параметры:
<Поток> (обязательный)
Тип: Поток, ПотокВПамяти, ФайловыйПоток, ЗаписьДанных.
Поток или объект ЗаписьДанных, в который требуется скопировать данные.
<Количество> (необязательный)
Тип: Число.
Количество байтов, которые необходимо скопировать. Если не задано, будут скопированы все данные до конца потока.
Возвращаемое значение:
Тип: Обещание.
Результат выполнения обещания - фактическое количество скопированных байтов типа Число.
Описание:
Асинхронная функция. Копирует заданное количество байтов из объекта ЧтениеДанных в указанный поток или объект ЗаписьДанных.
Если количество не указано, копируются все данные из объекта.
Доступность:
Тонкий клиент, толстый клиент.
См. также:
ЧтениеДанных, метод НачатьКопированиеВ
ЧтениеДанных, метод КопироватьВ
Использование в версии:
Доступен, начиная с версии 8.3.18.
Методическая информация
Практические примеры
Асинхронно скопировать непрочитанное тело в свой поток
В собственном наборе HDRBODY пропускаем заголовок и ожидаем копирование оставшихся четырёх байтов.
Где и как запускать
Модуль пустой управляемой формы учебной внешней обработки; тонкий или толстый клиент Windows. Вставьте весь модуль. Это не серверный код.
Подготовка
Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.
В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.
Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.
Пример работает только со своими данными в памяти; записи в базу, файлы и сеть нет.
&НаКлиенте
Асинх Процедура УчебныйПример(Команда)
Данные = ПолучитьДвоичныеДанныеИзСтроки("HDRBODY", КодировкаТекста.UTF8, Ложь);
Чтение = Новый ЧтениеДанных(Данные);
Целевой = Новый ПотокВПамяти;
Попытка
Пропущено = Ждать Чтение.ПропуститьАсинх(3);
Если Пропущено <> 3 Тогда
ВызватьИсключение "Учебный заголовок неполный";
КонецЕсли;
Скопировано = Ждать Чтение.КопироватьВАсинх(Целевой);
Сообщить(Скопировано = 4);
Ждать Чтение.ЗакрытьАсинх();
Исключение
Чтение.Закрыть();
Целевой.Закрыть();
ВызватьИсключение;
КонецПопытки;
Тело = Целевой.ЗакрытьИПолучитьДвоичныеДанные();
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Тело, КодировкаТекста.UTF8) = "BODY");
КонецПроцедурыРазбор по шагам
Создаём независимые источник и приёмник; оба принадлежат только этому запуску.
Ждать ПропуститьАсинх продвигает позицию на три байта. Проверяем фактическое количество.
Ждать КопироватьВАсинх возвращает количество скопированных байтов, а не поток и не текст.
Закрываем чтение, получаем данные из собственного приёмника и декодируем их явно.
Как проверить результат
Скопировано 4, восстановлен BODY; оба сравнения Истина.
Заголовок HDR не попадает в приёмник и файлы не создаются.
Ожидаемый результат
Получено тело сообщения без предварительного чтения остатка в строку.
На что обратить внимание
Не закрывайте целевой поток, пока ожидаемое копирование не завершено.
Операция переносит остаток, а не все исходные данные от начала.
Это память, не загрузка на сервер и не сохранение файла.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.