2016-11-18 24 views
0

比方說,我有2個狀態是ReceiveTimeout應用到藏匿的消息

ReadyBusy抽象的演員。

在忙碌狀態下,我只想接收特定類型的消息,例如PauseJobCancelJob,所有其他消息如StartNewJob都被隱藏。

問:如果我忙碌狀態設置SetReceiveTimeout(),它是在這種狀態下只適用於郵件,我居然過程(PauseJobCancelJob)或藏匿的消息也算?

在此先感謝

回答

0

總之,藏匿的消息也被認爲是因爲演員仍處於活動狀態,而它的積攢的消息。

當您使用SetRecieveTimeout()時,如果actor在指定的時間內沒有收到任何消息,則會發送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(); 
    }); 
} 
+0

謝謝,它似乎不可能設置只接收特定消息類型的接收超時,將不得不手動實現它 –