【问题标题】:CAF Promise ResultCAF 承诺结果
【发布时间】:2018-06-02 20:18:01
【问题描述】:

在 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的值。如果您有任何想法,请告诉我

【问题讨论】:

  • 我不确定你在问什么。您可以扩展“return 语句之前的 rp 值”部分吗? request(...).then(...) 将始终立即返回,并且基于事件的参与者不应阻塞。在.then(...) 延续中你想做哪些你不能做的事情?
  • 所以我想做的是在演员 A 中调用两个演员 B1 和 B2(使用承诺工作)。然后使用 B1 和 B2 的结果在 A 中进行计算。所以之后self->request,我必须在self->request之外使用返回结果。

标签: promise c++14 actor c++-actor-framework


【解决方案1】:

我只是分享一些我的理解。

响应承诺与future/promise 不完全相同(例如std::future 和std::promise),因此您不能像使用future/promise 那样使用response promise。

响应承诺的一种用法是在任务尚未完成时向发送者回复某些内容。假设演员A 向演员B 发送请求,但B 不是处理该请求的人。 B 将请求传递给另一个参与者 CC 处理请求。在这种情况下,B 将请求转发给C,并且必须回复一些内容给AB不能被阻塞等待C,否则B不能处理新的请求。最后,BA 发送响应承诺。 B创建的response promise实际上被A使用了,所以A可以等待C的结果。

附:很遗憾我没有足够的声誉来发表评论。

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 2016-12-05
    • 2017-08-04
    • 2019-06-30
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多