【发布时间】:2011-01-20 05:53:49
【问题描述】:
调用!!即使在调用者收到回复后(即:future 已准备好),从一个 actor 到另一个 worker actor 的方法似乎也保持通道打开。
例如,使用 !!将 11 条不同的消息从一个 actor 发送到另一个 worker actor 将导致 11 条类似于下面的消息显示在原始调用者的邮箱中,每个具有不同的 Channel@xxxx 值。
!(scala.actors.Channel@11b456f,Exit(com.test.app.actor.QueryActor@4f7bc2,'normal))
这些消息是否正在等待工作人员的回复,因为原始调用者在它自己调用 exit() 时发送了退出消息,或者它们是在另一端生成的,并且由于某种原因具有上面显示的打印表单?至此,worker actor 已经退出,所以 !! 的原始调用者绝对不会收到任何回复。
这种行为是不可取的,因为原始调用参与者的邮箱充满了这些退出消息(一个用于每次使用 !! 时创建的每个通道)。
如何阻止这种情况?原始呼叫者是否自动“链接”到每个创建的回复频道!打电话?
【问题讨论】: