Позволяет асинхронно предоставлять void-результат или ошибку связанному объекту Future.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 5c77833bef95ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Позволяет асинхронно предоставлять void-результат или ошибку связанному объекту Future.
Специализация ara::core::Promise< void, E > служит асинхронной конечной точкой производителя для сигнализации о завершении операции без возвращаемого значения или для передачи ошибки ([SWS_CORE_06341]). После инстанцирования через get_future() ровно один раз запрашивается соответствующий Future для потребителя ([SWS_CORE_06344]). Предоставление выполняется потокобезопасно (thread-safe) с помощью set_value(), SetError() или SetResult(), благодаря чему разделяемое состояние помечается как готовое. Поскольку класс обладает исключительно семантикой перемещения, многократная установка или отсутствие разделяемого состояния приводят к специфицированным нарушениям.
Контекст
Класс ara::core::Promise< void, E > представляет собой шаблонную специализацию для асинхронных процессов без полезного значения (тип возвращаемого значения void). Он образует сторону производителя (Producer) канала связи и синхронизирует асинхронные вычисления или операции со стороной потребителя (Consumer). Через общее внутреннее состояние (Shared State) он позволяет сигнализировать либо об успешном завершении операции, либо о возникновении ошибки типа E. Соответствующий объект-получатель предоставляется в форме ara::core::Future< void, E > ([SWS_CORE_06344]). Согласно требованиям AUTOSAR Adaptive Platform, реализация требует, чтобы тип ошибки E был совместим с ara::core::ErrorCode; любое отклонение приводит к ошибке компиляции.
Жизненный цикл
Создание экземпляра выполняется через конструктор по умолчанию без параметров [SWS_CORE_06341], который создает новое общее состояние и ведет себя аналогично стандартной функции C++ std::promise. Класс моделирует эксклюзивное владение и реализует строгую семантику перемещения: как конструктор копирования ([SWS_CORE_06350]), так и оператор присваивания с копированием ([SWS_CORE_06351]) удалены (delete).
Существующее состояние может быть передано другим экземплярам через конструктор перемещения ([SWS_CORE_06342]) или оператор присваивания с перемещением ([SWS_CORE_06343]). При присваивании с перемещением удерживаемое до этого момента Shared State сбрасывается, и состояние передается так, как если бы использовался Promise(std::move(other)).swap(*this) ([SWS_CORE_06343]). Кроме того, функция swap ([SWS_CORE_06352]) позволяет напрямую обменивать два состояния.
Деструктор [SWS_CORE_06349] освобождает удерживаемое Shared State, если таковое имеется. Интерпретация: преждевременный сброс Shared State при уничтожении еще не удовлетворенного Promise, вероятно, приведет к переходу связанного Future в повисшее (осиротевшее) состояние. Вопрос Q-e89b32fa3e5994e2 (открытый) В отношении параллелизма создание по умолчанию ([SWS_CORE_06341]) и установка результата ([SWS_CORE_06345], [SWS_CORE_06353], [SWS_CORE_06354], [SWS_CORE_06355], [SWS_CORE_06356]) являются потокобезопасными (thread-safe). Напротив, операции перемещения, swap, получение Future ([SWS_CORE_06344]) и уничтожение не являются thread-safe и требуют внешней координации при совместном доступе.
Путь использования
Типичное использование ara::core::Promise< void, E > включает подготовку асинхронного выполнения, передачу канала приема и последующее оповещение о результате:
Инициализация: производитель инстанцирует объект Promise ([SWS_CORE_06341]).
Получение Future: с помощью get_future() ровно один раз создается связанный ara::core::Future< void, E > ([SWS_CORE_06344]) и передается на сторону потребителя.
Установка результата: после завершения асинхронной операции производитель переводит разделяемое состояние в состояние готовности (ready):
в случае успеха — путем вызова set_value() без аргументов ([SWS_CORE_06345]);
в случае ошибки — путем сохранения ошибки через SetError, либо с перемещением ([SWS_CORE_06353]), либо с копированием ([SWS_CORE_06354]);
в качестве альтернативы — путем передачи полного Result< void, E > с помощью SetResult с копированием ([SWS_CORE_06355]) или с перемещением ([SWS_CORE_06356]).
Разрешение: как только состояние становится готовым, потребитель может получить результат через Future; объект Promise освобождается в конце своей области видимости ([SWS_CORE_06349]).
Нарушения предусловий приводят к определенным ошибочным ситуациям (Violations):
IsoStdFutureErrcFutureAlreadyRetrievedViolation: генерируется, если get_future() вызывается несколько раз для одного и того же разделяемого состояния ([SWS_CORE_06344]).
IsoStdFutureErrcNoStateViolation: возникает, когда get_future() вызывается без наличия у Promise разделяемого состояния ([SWS_CORE_06344]), например после операции перемещения ([SWS_CORE_06342]).
С точки зрения безопасности исключений методы SetError и SetResult являются условно безопасными к исключениям (conditionally exception safe): они гарантируют noexcept только в том случае, если тип E классифицирован как nothrow-move-конструируемый или nothrow-copy-конструируемый ([SWS_CORE_06353], [SWS_CORE_06354], [SWS_CORE_06355], [SWS_CORE_06356]).
Данное руководство по классу основано на спецификации AUTOSAR Adaptive Platform R25-11 и сформировано автоматически.
Return an associated Future with the same shared state as *this The returned Future is set as soon as this Promise receives the result, value, or an error. This fuction must only be called once as it is not allowed to have multiple Futures per Promise.
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
error
the error to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
error
the error to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
result
the result to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
result
the result to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
Return an associated Future with the same shared state as *this The returned Future is set as soon as this Promise receives the result, value, or an error. This fuction must only be called once as it is not allowed to have multiple Futures per Promise.
IsoStdFutureErrc- If the function is called more than once on the same shared FutureAlreadyRe- state. trievedViolation IsoStdFutureErrc- If *this has no shared state. NoStateViolation
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал