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