0

我在 iex 终端上编写了以下代码,之后它不再响应,终端就停止了,就像它在期待别的东西一样。究竟发生了什么?

receive do 
    {:hello, msg} -> msg          
    {:world, msg} -> "won't match" 
end

在此处输入图像描述

4

1 回答 1

1

receive默认情况下没有超时,因此进程将被阻塞,直到当前进程接收到与任何模式匹配的消息。如果你只是在玩,你可以设置一个超时after来确保不会发生这种情况:

receive do
  {:hello, msg} -> msg
  ...
after 5000 -> :timeout
end

如果在 5000 毫秒内没有收到与模式匹配的消息,则表达式现在将返回:timeout.

于 2018-02-19T14:02:52.590 回答