В 1С появились методы, позволяющие писать код без "ОписанийОповещений". Отличная новость!

&НаКлиенте 
Асинх Процедура КопируемыйФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

Диалог    = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Обещание  = Диалог.ВыбратьАсинх();

Попытка
	Результат  = Ждать Обещание;
	Если ТипЗнч(Результат) = Тип("Массив") И Результат.Количество() Тогда
		КопируемыйФайл = Результат[0];
	Иначе
		Возврат;
	КонецЕсли;
Исключение
	Сообщить(ИнформацияОбОшибке().Описание);	
КонецПопытки;

КонецПроцедуры

Выглядит отлично! А само копирование?

&НаКлиенте 
Асинх Процедура ЗапуститьКопированиеФайла(Команда)

ИмяКопируемогоФайла                = РазложитьПолноеИмяФайла(КопируемыйФайл).Имя; 
ОбещаниеСкопироватьФайл            = КопироватьФайлАсинх(КопируемыйФайл, Каталог + "\"+ ИмяКопируемогоФайла);
ОбещаниеПредупреждения             = ПредупреждениеАсинх("Файл копируется.", 1); 

Попытка
	Ждать ОбещаниеСкопироватьФайл;
Исключение                 
	Ждать ОбещаниеПредупреждения;  
	Сообщить(ОписаниеОшибки()); 
	Возврат;
КонецПопытки; 

Ждать ОбещаниеПредупреждения;  
ПредупреждениеАсинх("Файл скопирован."); 

КонецПроцедуры

Но как-то это слишком... Однопоточно что-ли.

А если мы хотим, продолжить интерактивную работу при копировании больших файлов?

Тогда нам нужно запустить копирование в отдельном потоке.

&НаКлиенте 
Асинх Процедура ЗапуститьКопированиеФайла(Команда)
ИмяКопируемогоФайла                = РазложитьПолноеИмяФайла(КопируемыйФайл).Имя; 
Режим                              = РежимДиалогаВопрос.ДаНет;

ИсполняемыйКодПотокаКопирования        = "Ждать КопироватьФайлАсинх(КопируемыйФайл, Каталог + ""\""+ ИмяКопируемогоФайла)";
Идентификатор                          = Новый УникальныйИдентификатор();
ИдентификаторОбещанияПотокаКопирования = Новый Поток(ИсполняемыйКодПотокаКопирования,Идентификатор); 

//Какой-то код.

//А тут нам точно нужен результат.
Пока НЕ(ОбещаниеПотокаИсполнено(ИдентификаторОбещанияПотокаКопирования)) Цикл
КонецЦикла;

Результат = ОбещаниеПотока(ИдентификаторОбещанияПотокаКопирования);

Если НЕ(ТипЗнч(Результат) = Тип("Исключение")) Тогда
	ПолноеИмяСкопированногоФайла = Результат.ОбещаниеПотока;
Иначе         
	ВызватьИсключениеАсинх(Результат);
КонецЕсли;

КонецПроцедуры