1

假设我有两个状态的抽象演员

ReadyBusy

在忙碌状态下,我只想接收特定类型的消息,例如PauseJobCancelJob所有其他消息,例如StartNewJob被隐藏。

问题:如果我设置SetReceiveTimeout()为 Busy 状态,它是否仅适用于我在此状态 ( PauseJob, CancelJob) 下实际处理的消息,还是也考虑隐藏的消息?

提前致谢

4

1 回答 1

1

简而言之,隐藏的消息也被考虑在内,因为actor在隐藏消息时仍然处于活动状态。

当您使用SetRecieveTimeout()RecieveTimeout消息时,演员在指定的时间内没有收到任何消息时发送。

private void Busy()
{
    SetReceiveTimeout(TimeSpan.FromSeconds(1));

    Receive<PauseJob>(msg =>
    {
        // Do something
    });

    Receive<ReceiveTimeout>(timeout =>
    {
        // I won't run until 1 second after 
        // all messages are processed or stashed
    });

    ReceiveAny(msg =>
    {
        Stash.Stash();
    });
}
于 2016-12-08T17:31:30.347 回答