什么是Task?
Task是指一些用来执行单一任务的进程, 它们通常很少和其它进程交流.
Task的作用是什么?
Task最主要的作用就是, 将顺序代码转换为并发代码. 在并发代码中, 我们不需要等前一步执行完毕, 就可以同时开始执行下一步; 最后收集一下各个Task的结果就行了.
一个task的结构是什么样子?
defstruct pid: nil, ref: nil, owner: nil
pid: 此task进程的pid.
ref: 此task的监视者.
owner: 此task的所有者.
Task模块里有哪些函数?
@spec start_link(fun) :: {:ok, pid}
@spec start_link(module, atom, [term]) :: {:ok, pid}
启动一个任务, 作为监督树的一部分.
@spec start(fun) :: {:ok, pid}
@spec start(module, atom, [term]) :: {:ok, pid}
启动一个任务.
@spec async(fun) :: t
@spec async(module, atom, [term]) :: t
启动一个任务, 它的返回值必须要在之后被收回(await).
@spec await(t, timeout) :: term | no_return
等待一个任务的返回值. 超时了会报错.
@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并结束任务, 然后回复一个消息.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。