我正在研究 F# Akka.Net API,它与 C# 对应物完全不同,因为它试图以惯用的方式公开 Akka 功能。所以它引入了一个计算表达式actor和几个辅助函数actorOf和actorOf2:
let consoleWriterActor =
spawn myActorSystem "consoleWriterActor" (actorOf Actors.consoleWriterActor)
let consoleReaderActor =
spawn myActorSystem "consoleReaderActor" (actorOf2 (Actors.consoleReaderActor consoleWriterActor))
actorOf对于生成不依赖于其他演员的演员很有用,并且actorOf2允许发送另一个演员作为正在创建的演员的参数,如上所示。
这很清楚,但我想知道仅将单个演员作为参数有什么特别之处?定义actorOf3、actorOf4等是否有助于向正在创建的演员发送多个演员参数?例如,C# 泛型 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))
你可以看到actor在链中相互引用:consoleReaderActor引用validationActor和validationActor引用consoleWriterActor。但是,如果我想让 consoleReaderActor 同时引用 validationActor 和 consoleWriterActor 怎么办?使用actorOf函数似乎不可能做到这一点。
更新感谢@Horsiath 的回答。我查看了 Akka.Net 训练营(F# 版本)中的一课,实际上可以在生成新演员时指定多个演员:
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))