2017-04-17 2 views
0

Task 모듈을 사용하십시오. 작업 X가 완료된 후 또는 작업 X 초 후 시작하는 작업 Y를 시작하는 가장 좋은 방법은 무엇입니까?다른 작업 완료 후 엘릭서 작업 시작

+0

왜 당신은'A.do_something; : timer.sleep (2000); B.do_another_thing' – Sheharyar

+0

@Sheharyar, 다른 처리가 계속되는 동안 백그라운드에서 비동기 적으로 작업을 실행하겠습니까? – user1232968

+0

아니요. 두 개의 서로 다른 메소드 호출을 하나의'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 

너무 작업을 사용할 수 있지만 정말 간단한 경우에 필요하지 않습니다.