CAF Promise Result
В CAF ответные обещания позволяют субъекту отправлять и получать другие сообщения до ответа на конкретный запрос. Моя проблема в том, как использовать результат этого обещания.
// function-based, statically typed, event-based API
adder::behavior_type calculator_master(adder::pointer self) {
auto w = self->spawn(worker);
return {
[=](add_atom x, int y, int z) -> result<int> {
auto rp = self->make_response_promise<int>();
self->request(w, infinite, x, y, z).then([=](int result) mutable {
rp.deliver(result);
});
return rp;
}
}; }
Я в основном должен использовать значение rp перед оператором return. Пожалуйста, дайте мне знать, если у вас есть идеи
1 ответ
Я просто делюсь некоторыми из моего понимания.
Обещание ответа не совсем то же самое, что и будущее / обещание (например, std::future и std:: обещание), поэтому вы не можете использовать ответное обещание, когда используете будущее / обещание.
Одним из вариантов использования обещания ответа является ответ отправителю, пока задача еще не выполнена. Предполагаемый актер A
отправляет запрос актеру B
но B
не тот, который обрабатывает запрос. B
доставляет запрос другому актеру C
а также C
обрабатывает запрос. В этом случае, B
направляет запрос C
и должен что-то ответить A
, B
нельзя заблокировать и ждать C
, иначе B
не может обрабатывать новые запросы. В конце, B
отправляет ответное обещание A
, Ответное обещание, созданное B
на самом деле используется A
чтобы A
может ждать результата C
,
PS Грустно, что мне не хватает репутации, чтобы комментировать.