Подробно на синтаксисе асинхронных вызовов останавливаться не буду. По ним есть синтаксис-помощник или такая статья про асинхронные вызовы, которой сам я и пользовался. Сама трассировка кода асинхронных вызовов довольно специфична, потому что это асинхронный вызов, а не привычный линейный код, при построении дракон-схем описывающих связки таких процедур возникли определенные сложности.
Прежде чем продолжить, оговорим принципы, которых я придерживаюсь при построении дракон-схем с кодом:
- прохождение дракон-схемы должно повторять поведение программы при трассировке.
- дракон-схема описывает логику построения кода с помощью понятных комментариев и подписей.
- дракон-схемы связаны между собой по аналогии с вызовами процедур и функций и хранят путь до этих процедур и функций
- дракон-схемы на одном листе соответствуют одному месту (например, "общий модуль" или "модуль формы")
Рассмотрим сначала сам код примера асинхронного вызова (обработка во вложении) из модуля формы:
&НаКлиенте
Процедура ЗапуститьТест(Команда)
ТестАсинхронности();
КонецПроцедуры
&НаКлиенте
Асинх Процедура ТестАсинхронности()
Об1 = КопироватьФайлАД(1);
Об2 = КопироватьФайлАД(2);
Об3 = КопироватьФайлАД(3);
Результат1 = Ждать Об1;
Результат2 = Ждать Об2;
Результат3 = Ждать Об3;
КонецПроцедуры
&НаКлиенте
Асинх Функция КопироватьФайлАД(НомерФайла)
Об4 = НайтиФайлыАсинх("C:\", "*", Ложь);
Результат = Ждать Об4;
Возврат НомерФайла;
КонецФункции
Теперь приведу дракон-схему, описывающую этот код:
Жирной линией обозначен путь трассировки при выполнении схемы.
Получается, что сначала мы отправляем на выполнение три асинхронных потока, а затем одномоментно приходит три результата наших вызовов.
Дракон-схему для программы ИС Дракон вы найдете во вложении.