如何使scala actor’等待信号’但不丢失任何消息?
发布时间:2020-12-16 18:39:36 所属栏目:安全 来源:网络整理
导读:我正试图让一个演员’去睡觉’等待另一个演员的信号.我想做的事情如下: def act(){ loop{ //Should I use loop here too?? if(sleepy){ react{ //SLEEPING case "Wake Up"= sleepy=false; //just to breack the react } }else{ react{ //React to other mes
我正试图让一个演员’去睡觉’等待另一个演员的信号.我想做的事情如下:
def act(){ loop{ //Should I use loop here too?? if(sleepy){ react{ //SLEEPING case "Wake Up"=> sleepy=false; //just to breack the react } }else{ react{ //React to other messages } } } } 现在,当我的演员睡觉时,其他消息会发生什么?他们会被放弃吗?我不想失去他们.解决这个问题的好方法是什么? 解决方法
您可以在react块中的其他情况下使用保护,react块中的不匹配消息保存在actor的消息队列中.要小心,在队列大小过大之前,演员肯定会被“吵醒”.
如果我没记错的话,由于反应的设计,你只能在循环中有一个反应块. val receiver = new Actor { private var sleeping = true def act { loop { react { case "Wake Up" => println("waking up"); sleeping = false case x if ! sleeping => println("processing "+x) } } } } receiver.start import Thread.sleep receiver ! "Message 1" sleep(2000L) receiver ! "Message 2" sleep(2000L) receiver ! "Wake Up" sleep(2000L) receiver ! "Message 3" sleep(2000L) receiver ! "Message 4" 起来处理消息1处理消息2处理消息3处理消息4 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |