gpt4 book ai didi

Scala 2.8Beta1 Actor

转载 作者:行者123 更新时间:2023-12-01 00:03:49 24 4
gpt4 key购买 nike

呼唤!!即使在调用者收到回复之后(即: future 已准备好),从一个 Actor 到另一名 worker Actor 的方法似乎也保持 channel 打开。

例如,使用 !!将 11 条不同的消息从一个 actor 发送到另一个 worker actor 将导致 11 条类似于下面的消息显示在原始调用者的邮箱中,每个具有不同的 Channel@xxxx 值。

!(scala.actors.Channel@11b456f,Exit(com.test.app.actor.QueryActor@4f7bc2,'normal))

这些消息是否在等待工作人员的回复,因为原始调用者是在它自己调用 exit() 时发送退出消息,或者它们是在另一端生成的,并且由于某种原因有上面显示的打印表单?至此,worker actor 已经退出,所以 !! 的原始调用者绝对不会收到任何回复。

这种行为是不可取的,因为原始调用参与者的邮箱充满了这些退出消息(每次使用 !! 时创建的每个 channel 都有一个)。

这怎么能阻止?原始调用者是否自动“链接”到每个创建的回复 channel !称呼?

最佳答案

之所以将这些 Exit 消息发送给原始调用者,是因为调用者将其用于接收 future 结果的临时 channel 链接到被调用者。特别是,如果 channel 接收到退出信号,则会在该 channel 上发送退出消息,这会导致类似于您描述的消息被发送给实际调用者(您可以将 channel 视为消息上的标签)。这样做是为了允许(重新)在调用者内部抛出异常,如果被调用者在发送 future 消息之前终止(在访问 future 时抛出异常)。

当前实现的问题是,即使 future 已经解决,调用者也会收到退出消息。这显然是一个应该在 Scala Trac 上提交的错误。一个可能的解决方法是仅在 future 尚未解决时才发送退出消息。在这种情况下,只要第一次使用 apply 或 isSet 访问 future ,就会删除 Exit 消息。

关于Scala 2.8Beta1 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com