当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Task.await_many用法及代码示例


Elixir语言中 Task.await_many 相关用法介绍如下。

用法:

await_many(tasks, timeout \\ 5000)
(从 1.11.0 开始)
@spec await_many([t()], timeout()) :: [term()]

等待来自多个任务的回复并返回它们。

此函数接收任务列表并在给定的时间间隔内等待它们的回复。它返回结果列表,其顺序与 tasks 输入参数中提供的任务的顺序相同。

如果任何任务进程死亡,调用者进程将以与该任务相同的原因退出。

超时,以毫秒或 :infinity 为单位,可以使用默认值 5000 给出。如果超时,则调用者进程将退出。任何链接到调用者进程的任务进程(使用 async 启动任务时就是这种情况)也将退出。任何捕获退出或未链接到调用者进程的任务进程将继续运行。

此函数假定任务的监视器仍处于活动状态或监视器的:DOWN 消息在消息队列中。如果有任何任务被监控,或者消息已经收到,这个函数将等待超时时间。

对于任何给定的任务,此函数只能调用一次。如果您希望能够多次检查 long-running 任务是否已完成其计算,请改用 yield_many/2

与 OTP 行为的兼容性

不建议在 OTP 行为中执行 await long-running 任务,例如 GenServer 。有关详细信息,请参阅 await/2

例子

iex> tasks = [
...>   Task.async(fn -> 1 + 1 end),
...>   Task.async(fn -> 2 + 3 end)
...> ]
iex> Task.await_many(tasks)
[2, 5]

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Task.await_many(tasks, timeout \\ 5000)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。