Akka.Net 从 non-Actor class 的 Actor class 中调用一个动作

Akka.Net Invoke an Action inside an Actor class from a non-Actor class

标题几乎说明了一切。如果可能的话,我想从与 Actor 不在同一文件夹中的 non-Actor class 调用 Actor class 中的 Action。

在演员模型中,您不会 "invoke an action" 演员。您可以询问某事或告诉某事。
为此,您需要演员的地址,在 akka.net 中您需要一个 IActorRef.

我不确定你所说的 "folder" 是什么意思,我将列举可能的含义和每个含义的答案:

  1. 相同的物理文件夹
    • actor 的物理位置 class 和 "calling class" 的物理位置与向 actor 发送消息的能力无关。
  2. 相同的命名空间文件夹
    • 命名空间不会直接影响向参与者发送消息的能力。它可能只受要发送的消息class的可见性的影响。
  3. 相同的 地址 文件夹
    • 同样,地址 文件夹不会影响向演员发送消息的能力。

为了能够向演员发送消息,您只需要它 IActorRef,有多种方法可以管理那些我不打算在这里写的引用,因为它取决于您的应用程序架构。

然而,我会提到你也可以使用 ActorSystem.ActorSelection 方法来获取位于特定 path 的 actor 的引用,但这是推荐,因为它很容易被误用并导致一些不良习惯。它的用法应被视为高级功能。

一旦你掌握了演员参考,你就可以从你的非演员 class 调用 Ask 方法,如果你期望一些结果(注意,结果将被包装在您必须设法检索结果的任务)。
如果您不希望得到答复(或者您不关心答复),您可以调用 Tell 方法。
您必须将要发送给演员的消息传递给这两种方法。

最后,一旦 actor 收到您的消息,您的消息将 最终 被处理,然后 actor 将执行其设计的任何操作。

如果您还没有这样做,bootcamp 是学习 akka.net 基础知识的好方法。