Справочник по Ada (Ada 2022)
E.4.1 Асинхронные удалённые вызовы
Этот подраздел вводит аспект Asynchronous, который можно указать, чтобы разрешить удалённому подпрограмме возвращаться до завершения выполнения соответствующего удалённого тела подпрограммы.
Абзацы с 2 по 7 были удалены.
Статическая семантика
Для удалённой процедуры может быть указан следующий определяемый языком аспект представления:
Asynchronous
Тип аспекта Asynchronous — Boolean. Если он указан непосредственно, aspect_definition должен быть статическим выражением. Если он не указан, аспект равен False.
Для типа удалённого доступа может быть указан следующий определяемый языком аспект представления:
Asynchronous
Тип аспекта Asynchronous — Boolean. Если он указан непосредственно, aspect_definition должен быть статическим выражением. Если он не указан (включая наследование), аспект равен False.
Правила легальности
Если аспект Asynchronous указан для удалённой процедуры, все формальные параметры процедуры должны иметь режим in.
Если аспект Asynchronous указан для типа удалённого доступа, тип должен быть типом удалённого доступа к классу, или тип должен быть типом удалённого доступа к процедуре, где все формальные параметры выделенной структуры типа имеют режим in.
Динамическая семантика
Удалённый вызов является асинхронным, если это вызов процедуры или вызов через значение типа доступа к процедуре, для которых аспект Asynchronous равен True. Кроме того, если аспект Asynchronous равен True для типа удалённого доступа к классу, то вызов диспетчеризации на процедуру с контролируемым операндом, обозначенным значением типа, является асинхронным, если все формальные параметры процедуры имеют режим in.
Требования к реализации
Асинхронные вызовы удалённых процедур должны быть реализованы таким образом, чтобы соответствующее тело выполнялось не более одного раза в результате вызова.