Elixir send和receive
2023-12-15 13:58 更新
我们可以用
send/2
发送信息给进程,并用receiver/1
接收:iex> send self(), {:hello, "world"}
{:hello, "world"}
iex> receive do
...> {:hello, msg} -> msg
...> {:world, msg} -> "won't match"
...> end
"world"
当一个信息传送至进程,它被存放在进程的邮箱中.receive/1
块会进入当前进程的邮箱,搜索是否有能模式匹配成功的信息.receive/1
支持卫语句和多从句,例如case/2
.
如果邮箱中没有能够匹配任何模式的信息,当前进程会一直等到能够匹配的信息出现.等待时间也可以被指定:
iex> receive do
...> {:hello, msg} -> msg
...> after
...> 1_000 -> "nothing after 1s"
...> end
"nothing after 1s"
如果你想要的是已经在邮箱中的信息,可以将时限设置为0.
让我们使用这些来在进程间通信:
iex> parent = self()
#PID<0.41.0>
iex> spawn fn -> send(parent, {:hello, self()}) end
#PID<0.48.0>
iex> receive do
...> {:hello, pid} -> "Got hello from #{inspect pid}"
...> end
"Got hello from #PID<0.48.0>"
当在用户界面中时,你会发现flush/0
助手非常有用.它会刷新并打印邮箱中的所有信息.
iex> send self(), :hello
:hello
iex> flush()
:hello
:ok
以上内容是否对您有帮助:
更多建议: