如何使用 F# 在 akka.net 中创建子演员?

How to create a child actor in akka.net using F#?

我有两个演员 - childActor 和 parentActor

open System
open Akka
open Akka.FSharp

let systemActor = System.create "systemActor" <| Configuration.defaultConfig()

let childActor (mailbox: Actor<_>) = 
    let rec loop() = actor {
        let! message = mailbox.Receive()
        printfn "Message received"
        return! loop()
    }
    loop()

let parentActor (mailbox: Actor<_>) = 
    let rec loop() = actor {
        let! message = mailbox.Receive()
        printfn "Message received"
        return! loop()
    }
    loop()

我可以使用 spawn 函数创建父 actor 引用。

let parentRef = spawn systemActor "parentActor" parentActor

现在我要做的是在父actor 下创建子actor 引用。如下所示。

let childRef = spawn parentRef "childActor" childActor

但这不起作用。 spawn 函数需要 IActorRefFactory 类型的参数,因此它不接受 IActorRef。有什么方法可以使用 F# 在 akka.net 中的父 actor 下创建子 actor?

IActorRefFactory 是一个负责确定父级的接口,在 Akka.FSharp 的情况下,它也由 ActorSystemActor<_> 实现。所以在你的情况下只需使用:

let childRef = spawn mailbox "childActor" childActor