gpt4 book ai didi

f# - 为什么 Akka.Net F# API 定义了 actorOf2 而不是 actorOf3、actorOf4 等?

转载 作者:行者123 更新时间:2023-12-04 20:36:41 24 4
gpt4 key购买 nike

我正在研究 F# Akka.Net API,它与 C# 的对应物完全不同,因为它试图以惯用的方式公开 Akka 功能。所以它引入了一个计算表达式 Actor 和几个辅助函数 Actor actorOf2 :

let consoleWriterActor = 
spawn myActorSystem "consoleWriterActor" (actorOf Actors.consoleWriterActor)
let consoleReaderActor =
spawn myActorSystem "consoleReaderActor" (actorOf2 (Actors.consoleReaderActor consoleWriterActor))

Actor 可用于生成不依赖于其他 Actor 的 Actor ,以及 actorOf2 允许发送另一个参与者作为正在创建的参与者的参数,如上所示。

这很清楚,但我想知道仅将单个 Actor 作为参数有什么特别之处?不会定义 actorOf3 , actorOf4 等有助于向正在创建的 Actor 发送多个 Actor 参数吗?例如,C# 泛型 Action<...> 宏定义了最多 16 个 Action 参数。定义几个 有意义吗? actorOfX 职能?例如,来自 Akka.Net 训练营的使用验证操作的代码如下所示:
let consoleWriterActor = 
spawn myActorSystem "consoleWriterActor" (actorOf Actors.consoleWriterActor)
let validationActor =
spawn myActorSystem "validationActor" (actorOf2 (Actors.validationActor consoleWriterActor))
let consoleReaderActor =
spawn myActorSystem "consoleReaderActor" (actorOf2 (Actors.consoleReaderActor validationActor))

您可以看到actors 在链中相互引用:consoleReaderActor 引用validationActor,validationActor 引用consoleWriterActor。但是如果我想让 consoleReaderActor 引用 validationActor 和 consoleWriterActor 怎么办?看起来这不可能使用 Actor 职能。

更新 感谢@Horusiath 的回答。我查看了 Akka.Net 训练营(F# 版本)的类(class)之一,实际上可以在生成新角色时指定多个角色:
let a1 = 
spawn myActorSystem "a1" (actorOf Actors.consoleWriterActor)
let a2 =
spawn myActorSystem "a2" (actorOf2 (Actors.consoleReaderActor consoleWriterActor))
let a2 =
spawn myActorSystem "a3" (actorOf2 (Actors.fileValidatorActor consoleWriterActor tailCoordinatorActor))

最佳答案

actorOf2不发送任何 Actor 作为参数。相反,它将参与者上下文暴露给用户定义的函数。而对于简单的基于接收器的 Actor 来说,这是没有必要的 - 这里 actorOf就足够了 - 任何更高级的工作都需要它,例如生成子 Actor 、安排和订阅以及发布消息。

关于f# - 为什么 Akka.Net F# API 定义了 actorOf2 而不是 actorOf3、actorOf4 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34155628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com