W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
進(jìn)程中運(yùn)行的所有Elixir代碼都會(huì)互相交流.當(dāng)一個(gè)進(jìn)程因"自然原因"(未處理的異常)死亡時(shí),就會(huì)發(fā)送一個(gè)?exit
?信號(hào).直接發(fā)送一個(gè)退出信號(hào)也會(huì)讓進(jìn)程死亡:
iex> spawn_link fn -> exit(1) end
#PID<0.56.0>
** (EXIT from #PID<0.56.0>) 1
上述例子中,鏈接的進(jìn)程死了,是因?yàn)榘l(fā)送了一個(gè)值為1的?exit
?信號(hào).Elixir殼自動(dòng)處理了這些信息并將其打印到終端.
?exit
?也可以被?try/catch
?"捕獲":
iex> try do
...> exit "I am exiting"
...> catch
...> :exit, _ -> "not really"
...> end
"not really"
使用?try/catch
?已經(jīng)很不常見(jiàn),用它來(lái)捕獲退出就更少見(jiàn)了.
?exit
?信號(hào)是由Erlang VM提供的容錯(cuò)系統(tǒng)中重要的部分.進(jìn)程通常在監(jiān)督樹(shù)下運(yùn)行,這些樹(shù)是自己處理的,只是等待來(lái)自監(jiān)督過(guò)程中的退出信號(hào).一旦接收到了退出信號(hào),監(jiān)督策略將啟動(dòng),并重啟監(jiān)督進(jìn)程.
正是由于監(jiān)督系統(tǒng)的存在,使得?try/catch
?與?try/rescue
?結(jié)構(gòu)在Elixir中如此少見(jiàn).語(yǔ)氣解救一個(gè)錯(cuò)誤,我們更愿意"快速失敗",因?yàn)楸O(jiān)督樹(shù)會(huì)保證我們的應(yīng)用能夠在出錯(cuò)之后回到一個(gè)已知的初始狀態(tài).
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: