在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;
}
}; }
我基本上必须在return语句之前使用rp的值。如果您有任何想法,请告诉我
答案 0 :(得分:0)
我只是分享一些理解。
响应承诺与future / promise不完全相同(例如std :: future和std :: promise),因此在使用future / promise时不能使用响应promise。
响应承诺的一种用法是在任务尚未完成时向发件人回复。假定的actor A
向actor B
发送请求,但B
不是处理请求的请求。 B
将请求传递给另一个角色C
,C
处理请求。在这种情况下,B
会将请求转发给C
,并且必须回复A
。无法阻止B
并等待C
,否则B
无法处理新请求。最后,B
向A
发送回复承诺。 B
实际使用A
创建的响应承诺,以便A
可以等待C
的结果。
P.S。很遗憾,我没有足够的声誉来发表评论。