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

Vag*_*lov 5 f# actor-model akka.net

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

let consoleWriterActor = 
        spawn myActorSystem "consoleWriterActor" (actorOf Actors.consoleWriterActor)
let consoleReaderActor = 
        spawn myActorSystem "consoleReaderActor" (actorOf2 (Actors.consoleReaderActor consoleWriterActor))
Run Code Online (Sandbox Code Playgroud)

所述actorOf是有用产卵不依赖于额外的行动者演员,和actorOf2允许发送另一个演员作为正在创建的演员的参数,如上所示.

这很清楚,但我想知道将一个演员作为参数是多么特别?不定义actorOf3,actorOf4等有助于将多个actor参数发送给正在创建的actor吗?例如,C#generic Action <...>宏具有最多16个操作参数的定义.定义几个actorOfX函数是否有意义?例如,使用验证操作的Akka.Net bootcamp代码如下所示:

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))
Run Code Online (Sandbox Code Playgroud)

您可以看到actor在链中相互引用:consoleReaderActor引用validationActor和validationActor引用consoleWriterActor.但是如果我想让consoleReaderActor同时引用validationActor和consoleWriterActor呢?使用actorOf函数看起来不太可能.

更新感谢@Horusiath的回答.我查看了Akka.Net bootcamp(F#版本)中的一个课程,实际上可以在生成一个新的actor时指定多个actor:

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))
Run Code Online (Sandbox Code Playgroud)

Bar*_*ski 3

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