Task是指一些用來執行單一任務的進程, 它們一般不多和其它進程交流.併發
Task最主要的做用就是, 將順序代碼轉換爲併發代碼. 在併發代碼中, 咱們不須要等前一步執行完畢, 就能夠同時開始執行下一步; 最後收集一下各個Task的結果就好了.async
defstruct pid: nil, ref: nil, owner: nil
pid: 此task進程的pid.
ref: 此task的監視者.
owner: 此task的全部者.函數
@spec start_link(fun) :: {:ok, pid} @spec start_link(module, atom, [term]) :: {:ok, pid}
啓動一個任務, 做爲監督樹的一部分.atom
@spec start(fun) :: {:ok, pid} @spec start(module, atom, [term]) :: {:ok, pid}
啓動一個任務.spa
@spec async(fun) :: t @spec async(module, atom, [term]) :: t
啓動一個任務, 它的返回值必需要在以後被收回(await).code
@spec await(t, timeout) :: term | no_return
等待一個任務的返回值. 超時了會報錯.blog
@spec yield(t, timeout) :: {:ok, term} | {:exit, term} | nil
等待一個任務的返回值. 超時不會報錯.進程
@spec yield_many([t], timeout) :: [{t, {:ok, term} | {:exit, term} | nil}]
在給定的時間內接受(yield)多個任務的返回值.圖片
@spec shutdown(t, timeout | :brutal_kill) :: {:ok, term} | {:exit, term} | nil
解除link並結束任務, 而後回覆一個消息.it