首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参与者无法接收发送到`mailbox.Sender ()`的消息?

参与者无法接收发送到`mailbox.Sender ()`的消息?
EN

Stack Overflow用户
提问于 2018-10-03 14:33:52
回答 1查看 332关注 0票数 1

我创建了以下测试代码- .Net核心2.1控制台应用程序。它只打印以下消息

TestActor从akka接收到消息MyTask ("Test1","Test1")://MySystem/user/Scheduler#1426101451

但是,参与者Ok 0不能接收消息scheduler

代码语言:javascript
复制
open System
open Akka.FSharp
open Akka

type MyTask = MyTask of item1: string * item2: string 

let system = System.create "MySystem" <| Configuration.load ()

let scheduler (actors: Actor.IActorRef) (mailbox: Actor<Result<int, string>>) =
    let rec loop (list: int list list) = actor {
        let! m = mailbox.Receive ()
        let sender = mailbox.Sender ()
        let akkaName = mailbox.Self.Path.Name
        printfn "%s received message %A from %A" akkaName m sender
        return! loop []
    }
    actors <! MyTask("Test1", "Test1")
    loop []

let processor (mailbox: Actor<MyTask>) =
    let rec loop () = actor {
        let! m = mailbox.Receive ()
        let sender = mailbox.Sender ()
        let akkaName = mailbox.Self.Path.Name
        printfn "%s received message %A from %A" akkaName m sender
        sender <! Ok 0 // scheduler cannot receive this message?
        return! loop ()
    }
    loop ()

[<EntryPoint>]
let main argv =
    let actor = spawn system "TestActor" processor
    spawn system "Scheduler" (scheduler actor) |> ignore
    system.WhenTerminated.Wait()
    0

更新:

当我将参数从(mailbox: Actor<Result<int, string>>)更改为(mailbox: Actor<_>)后,它就可以工作了。

EN

回答 1

Stack Overflow用户

发布于 2018-10-03 14:44:18

scheduler不是processor响应的MyTask消息的发送方,因为您正在从参与者计算之外执行tell (<!)操作。这意味着它基本上是在没有发送者的情况下发送的。您可以使用Tell方法在IActorRef上与显式发送方一起发送,因为您希望从参与者计算的上下文之外发送它:

actors.Tell(MyTask("Test1", "Test1"), mailbox.Self)

编辑

另一个问题是,mailbox参数的scheduler被键入为Actor<Result<int, string>>,但是由于在上下文中Ok 0将被推断为Result<int,obj>,因此它将与参与者类型签名不匹配,并且消息将被忽略。当使用特定消息类型定义参与者时,任何不同类型的消息都将被忽略。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52629469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档