处理消息优先级Erlang,也称为选择性接收

gstyhher  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(131)

我有一个进程代码,我想发送一个“死”问题来杀死它。但是我想确保每次杀死消息都是优先的,所以如果有一个-进程将立即死亡。

receive 
 die -> dead;
after
0 -> receive
      Message -> do_something(Message)
    after
    0 -> func(NewX)
    end
end.
yhived7q

yhived7q1#

对于您的代码,您是忙碌等待的,您可以执行以下操作:

func(X) ->
    receive % This checks the whole mailbox for 'die'
        die -> dead; 
    after 0 -> % No 'die' message in mailbox, process the next Message whenever it arrives
        receive % This checks only the next Message in the mailbox
            die -> dead;
            Message -> func(do_something(X, Message))
        end
    end.

相关问题