async-await - 异步任务不返回结果
问题描述
我有大约 10-15 个 ecto 查询,我想在我的 API 代码中异步运行。我正在使用 Task.async 和 Task.yeild_many
以下是异步任务的代码 -
def get_tasks() do
task_1 =
Task.async(SomeModule, :some_function, [
param_1,
param_2
])
task_2 =
Task.async(SomeModule, :some_function, [
param_1,
param_2
])
task_3 =
Task.async(SomeModule, :some_function, [
param_1,
param_2
])
[task_1, task_2, task_3]
end
我的主要功能中的任务是-
[
{_, task_1},
{_, task_2},
{_, task_3}
] =
[
task_1,
task_2,
task_3,
]
|> MyCode.TaskHelper.yeild_multiple_tasks()
我的任务助手代码如下 -
defmodule MyCode.TaskHelper do
def get_results_or_shutdown(tasks_with_results) do
Enum.map(tasks_with_results, fn {task, res} ->
res || Task.shutdown(task, :brutal_kill)
end)
end
@doc """
Returns the result of multiple tasks ran parallely
## Parameters
- task_list: list, a list of all tasks
"""
def yeild_multiple_tasks(task_list) do
task_list
|> Task.yield_many()
|> get_results_or_shutdown()
end
end
每个任务都是 ecto 查询。问题是任务的行为是随机的。有时他们返回结果,有时他们不返回。但是没有时间所有任务都有返回结果(出于代表性目的,我写了 3 个任务,但我有大约 10-15 个异步任务)。我同步运行代码,它返回了正确的结果(显然)。我尝试将配置中的 pool_size 更改为 Repo 的 50,但无济于事。
有人可以帮我解决这个问题吗?我被困在这里了。
解决方案
推荐阅读
- javascript - 如何使用 JavaScript 在数组中创建 onkey up 搜索?
- ios - 在iOS中的两条线之间绘制垂直线
- graphql - 如何使用 Graphql 动态更新一个表中的多行
- scala - 正确使用 .cache() 和 .unpersist()
- sql - SQL Server 信息_架构
- mysql - 除非以 root 身份登录到 unix,否则无法登录 MySQL 命令行
- java - ListView 在滚动时崩溃
- java - Quarkus 中的 JAX-RS 子资源问题
- docker - 如何使“docker build”从上次失败的地方开始
- roku - Roku 上的 SetMaxVideoDecodeResolution 示例