如何解决Task.async/1 中没有匹配的函数子句
我正在构建多个 upsert 并且我被困在这部分
multi =
Enum.reduce(randoms_info,Multi.new(),fn random_info,multi ->
Task.async(build_random_multi(multi,random_info,merchant))
end)
|> Enum.map(&Task.await/1)
|> build_random_arrangement_multi(store)
运行此代码后,控制台会告诉我 (FunctionClauseError) no function clause matching in Task.async/1
我做错了什么。对不起,我是新手
解决方法
Task.async/3
产生一个进程并返回一个 Task.t()
。
如果没有看到 build_random_multi/3
的实现,很难说出您想要实现什么,但是构建 Ecto.Multi
(我假设它是 ecto)绝对不耗时,所以我怀疑同时产生他们的作品是否有意义。
Task.await_many/2
可能是等待多个任务的正确方法,但在您的情况下,它可能直接简化为下面没有任何 Task
但有 Ecto.Multi.merge/2
。>
multi =
randoms_info
|> Enum.reduce(Multi.new(),&Multi.merge(&2,build_random_multi(&2,&1,merchant)))
|> build_random_arrangement_multi(store)
,
我已经用这个解决了这个问题
multi =
Enum.reduce(randoms_info,Multi.new(),Task.async(fn ->
build_random_multi(&2,merchant)
end))
|> Enum.map(&Task.await/1)
|> build_random_arrangement_multi(store)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。