2017-04-17 9 views
0

Taskモジュールを使用してください。タスクXが完了した後、またはタスクXの秒後にタスクYを開始するのに最適なアプローチは何ですか?別のタスクが完了した後にエリクシールタスクを開始する

+0

「A.do_something」のようなことをしないでください。 :timer.sleep(2000); B.do_another_thing' – Sheharyar

+0

@Sheharyar、他の処理が続行されている間にバックグラウンドでタスクを非同期で実行しますか? – user1232968

+0

いいえ、2つの異なるメソッド呼び出しを単一の 'Task'に':timer.sleep'で囲むことができます。両方とも非同期で実行され、X秒間に実行されます。 – Sheharyar

答えて

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 

あなたもタスクを使用できますが、単純なケースでは本当に必要ではありません。

関連する問題