我有一个 IPClient 演员,它管理/拥有一个打开/关闭成本高昂的连接。
在演员处理完消息之前,我想查看演员邮箱的顶部,检查是否还有另一条消息待处理。- 如果演员还有更多工作,请保持连接打开。- 如果参与者清空了邮箱,则关闭连接。
这是我的想法的要点:
public void Handle(PollDevice message)
    {
        if (!_client.IsConnected)
            _client.Connect();
        var results = _client.GetData()
        var actorHasMoreWork = Context.Dispatcher.Mailboxes.???
        if (!actorHasMoreWork)
            _client.Disconnect();
        Sender.Tell(true);
    }
这可能吗?这是最好的方法吗?
我有一个部分答案。
您可以通过以下方式获取演员的邮箱 ID(但不是邮箱本身)Context.Props.Mailbox
一旦你有了演员的邮箱(同样,上一步不会给你),我对文档的理解表明你应该能够使用 或 来Mailbox.MessageQueue.HasMessages获取Mailbox.MessageQueue.Count有关内容的信息。据我所知,如果不将消息出队,您将无法看到任何消息。
然而,我无法确定获取 Mailbox 对象的方法,而且我实际上发现了一些证据,目前在 Akka.Net 中这是不可能的。有一个关于实现这一点的 GitHub 问题自 2014 年 9 月以来一直开放,最后一次更新也是从 2014 年 9 月开始。