通过有意地等待/阻塞ReceiveAsync处理程序来创建一种串行操作队列

时间:2019-05-05 13:46:15

标签: akka.net

在这里阅读: https://petabridge.com/blog/akkadotnet-async-actors-using-pipeto/

  

一旦先前对OnReceive的调用退出,演员的邮箱就会将新消息推送到演员的OnReceive方法中。

之后

  

在ReceiveActor上,使用ReceiveAsync,其中T是此接收处理程序期望的消息类型。从那里,您可以使用async并在演员内部等待您内心的渴望。

     

但是,与此相关的是成本。当您的actor等待任何给定的任务时, actor将无法处理发送给它的任何其他消息,直到它完成对消息的全部处理为止。(强调我的想法)

在我看来,我可以使用这种阻塞质量来强制Actor成为一种串行操作队列。是的,如果进程崩溃并且排队的消息未保留,则将导致这些消息丢失。假设可以,但是就我而言,这是可取的。还有其他原因不喜欢这样的演员吗?

1 个答案:

答案 0 :(得分:0)

  

还有其他原因不喜欢这样的演员吗?

您的总体问题在前提上有缺陷,但是简短的答案是您应该绝对以这种方式使用Actors。

您的问题的缺陷在于,您引用的博客文章涉及使用异步和PipeTo。您似乎所缺少的是 all Actor是以这种方式工作的,无论是同步的还是异步的,以及是否使用PipeTo!

Actor的整个概念(至少在Akka.Net中)是围绕一次处理一个邮箱中的消息(您所说的“串行操作队列”)建立的。