2

我有两个演员 - 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 函数创建父演员参考。

let parentRef = spawn systemActor "parentActor" parentActor

现在我在这里要做的是在父actor下创建子actor引用。像下面的东西。

let childRef = spawn parentRef "childActor" childActor

但这不起作用。spawn 函数需要 IActorRefFactory 类型的参数,因此它不接受 IActorRef。有没有办法使用 F# 在 akka.net 中的父演员下创建一个子演员?

4

1 回答 1

4

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

let childRef = spawn mailbox "childActor" childActor
于 2021-10-09T10:06:02.447 回答