在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的值。如果你有什么想法,请告诉我
发布于 2018-06-04 17:16:55
我只是分享一些我的理解。
Response promise与future/promise不完全相同(例如std::future和std:: promise ),所以您不能使用response promise,因为您使用future/promise。
response promise的一种用法是在任务尚未完成时回复发送者。假设执行元A向执行元B发送请求,但B不是处理该请求的那个。B将请求传递给另一个参与者C,C处理该请求。在这种情况下,B将请求转发给C,并且必须向A回复一些东西。B不能被阻塞并等待C,否则B无法处理新请求。最后,B向A发送一个响应承诺。B创建的响应承诺实际上由A使用,因此A可以等待C的结果。
另外,遗憾的是我没有足够的名气来发表评论。
https://stackoverflow.com/questions/50660819
复制相似问题