【问题标题】:Start Elixir Task after Completion of another Task完成另一个任务后启动 Elixir 任务
【发布时间】:2017-09-12 15:25:09
【问题描述】:

请使用Task 模块,在任务 X 完成后或任务 X 启动 x 秒后启动任务 Y 的最佳方法是什么?

【问题讨论】:

  • 你为什么不干点儿A.do_something; :timer.sleep(2000); B.do_another_thing
  • @Sheharyar,这会在后台异步运行任务,而其他处理继续吗?
  • 否,但您可以将两个不同的方法调用包装在一个 Task 中,并在它们之间使用 :timer.sleep。它们都将异步执行,它们之间有 X 秒。
  • @Sheharyar,谢谢!

标签: erlang elixir phoenix-framework


【解决方案1】:

根据您在 X 完成时或 5 秒后启动 Y 的要求,您应该使用消息来通知任务 Y 并给 Y 超时。这应该可以解决问题:

defmodule Schedule do
  def run do
    IO.puts "running it..."
    spawn &task1/0
  end

  def task1 do
    pid = spawn &task2/0

    # do your work here
    IO.puts "working on task 1"
    :timer.sleep 6_000
    send pid, :start
    IO.puts " task 1 done"
  end

  def task2 do
    receive do
      :start -> :ok
      after 
        5_000 ->  :ok
    end
    # do your work here
    IO.puts "working on task 2"
  end
end

您也可以使用任务,但对于一个简单的案例来说并不真正需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多