我有一个IPClient actor,它管理/拥有一个打开/关闭成本很高的连接。
在演员完成处理邮件之前,我想查看演员邮箱的顶部以检查是否有其他待处理的邮件。 - 如果演员有更多工作,请保持连接打开。 - 如果演员清空了它的邮箱,请关闭连接。
以下是我在想的内容:
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);
}
这可能吗?这是最好的方式吗?
答案 0 :(得分:1)
我有部分答案。
您可以使用Context.Props.Mailbox
一旦你有一个演员的邮箱(再次,上一步不会给你),我对文档的理解说你应该能够使用Mailbox.MessageQueue.HasMessages
或Mailbox.MessageQueue.Count
来获取有关内容的信息。据我所知,如果没有将它们出列,你将无法看到任何消息。
然而,我无法确定获取邮箱对象的方法,而且我实际上已经找到了一些证据,它目前在Akka.Net中是不可能的。 a GitHub issue about making this possible自2014年9月开始发布,最后一次更新也是从2014年9月开始。