Elixir send和receive

2023-12-15 13:58 更新
我們可以用send/2發(fā)送信息給進程,并用receiver/1接收:
iex> send self(), {:hello, "world"}
{:hello, "world"}
iex> receive do
...>   {:hello, msg} -> msg
...>   {:world, msg} -> "won't match"
...> end
"world"

當(dāng)一個信息傳送至進程,它被存放在進程的郵箱中.receive/1塊會進入當(dāng)前進程的郵箱,搜索是否有能模式匹配成功的信息.receive/1支持衛(wèi)語句和多從句,例如case/2.

如果郵箱中沒有能夠匹配任何模式的信息,當(dāng)前進程會一直等到能夠匹配的信息出現(xiàn).等待時間也可以被指定:

iex> receive do
...>   {:hello, msg}  -> msg
...> after
...>   1_000 -> "nothing after 1s"
...> end
"nothing after 1s"

如果你想要的是已經(jīng)在郵箱中的信息,可以將時限設(shè)置為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>"

當(dāng)在用戶界面中時,你會發(fā)現(xiàn)?flush/0?助手非常有用.它會刷新并打印郵箱中的所有信息.

iex> send self(), :hello
:hello
iex> flush()
:hello
:ok


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號