作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Phoenix 应用程序中,我有一个模块函数,如 Reviews.create(attributes)
.它会立即做一些工作,并启动一个任务(使用 Task.async
)来做额外的工作。
我可以像这样测试它:
{:ok, new_review, task} = Reviews.create(attrs)
# verify that new_review is correct
Task.await(task)
# verify that the task did what it should
Reviews.create/1
来自 Controller 。从那里开始,我想将任务视为“一劳永逸”。这很简单:我只是不调用
Task.await
.
[error] Postgrex.Protocol (#PID<0.344.0>) disconnected: **
(DBConnection.ConnectionError) owner #PID<0.753.0> exited
while client #PID<0.755.0> is still running with: shutdown
Task.forget_about(task)
,那就太好了。 ,但那不存在。
最佳答案
您将需要使用 Task.start/1
反而。它基本上以相同的方式运行,它只是在不同的进程中运行您的函数,但它不会以任何方式链接到产生它的进程。
直接来自文档
This is only used when the task is used for side-effects (i.e. no interest in the returned result) and it should not be linked to the current process.
关于elixir - 如何在没有测试警告的情况下从 Controller 运行 "fire and forget"任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45592956/
我是一名优秀的程序员,十分优秀!