可以或应该在控制器#action 中使用 Task.async() 吗?

痛苦

因为Task.async()链接到当前进程,这是否意味着如果我在控制器的动作中使用它,一旦执行了动作,它会自动杀死,或者会死?

defmodule MyAppWeb.PageController do
  use MyAppWeb, :controller

  def index(conn, _params) do
    
    # ????
    Task.async(fn -> some_10_second_long_stuff() end)
    Task.async(fn -> another_10_second_long_stuff() end)
    # will they both get killed or die?

    render(conn, "index.html")
  end

如果是这样,应该改用什么?Task.start()?

阿列克谢·马蒂乌什金

的唯一目的Task.async/1是创建一个可以轻松等待的任务。

除非被炸毁或被杀死(阅读:如果它正常返回),它只会默默地死去,而且它肯定不会对调用进程做任何事情。如果任务异常死亡,也会导致调用进程崩溃。

我在上面链接的文档中对此进行了很好的描述。

也就是说,如果您只想为副作用生成任务,请使用Task.start/1. 如果要监视任务并重新启动,如果崩溃,请使用Task.start_link/1. 如果您需要控制器进程等待任务,请使用Task.async/1.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应该在Elixir Phoenix的控制器或模型中使用Ecto.Repo吗?

我应该在可能不使用类的控制器中使用Lazy <T>吗?

我应该在Task.Run()中使用await吗?

我应该在nopcommerce任务中使用Thread.Sleep或Task.Delay吗?

我们应该在 SpringBoot 中将 @Scheduled 与控制器方法(如 @PostMaping)一起使用吗?

可以在async.parallel中使用async.waterfall吗?

我们需要在控制器中使用 async/await 关键字吗?

Promise { <state>: "pending" } - 我们应该在 async / await 之后使用 .then 吗?使困惑

在使用SplitViewController之前,它应该在其索引0处拥有一个视图控制器吗?

可以由多个控制器和命令使用的Laravel方法。应该在哪里?

我可以在AngularJS中使用Async.js库吗?

可以在构造函数中使用async / await吗?

Angular的新功能:这应该在服务中使用还是可以保留在控制器中?

我应该在 Rails 中使用多个 Action Mailer 吗?

我应该在Laravel中使用belongsTo或hasOne吗?

我应该在ECS中使用静态类吗?

我应该在Couchbase中使用本地索引吗?

我应该在Promise中使用return吗?

我应该在Java中使用Qt Jambi吗?

我应该在 Kotlin 的界面中使用属性吗?

应该在递归函数中使用StringBuilder吗?

我应该在调度块中使用“ weakSelf”吗?

我应该在嵌套块中使用weakSelf吗?

我应该在main(){}中使用#include语句吗?

我应该在钩子中使用useMemo吗?

我应该在BehaviorSubject中使用asObservable吗?

我应该在TDD中使用lambda吗?

我应该在DTO中使用构建器模式吗?

什么时候应该在ASP.NET MVC中使用异步控制器?