2016-12-12 5 views
0

Я звоню ExampleJob.perform_later в действии. Эта работа, в свою очередь, вызывает два других задания (см. Ниже).Если рабочие места в рамках рабочих мест используют perform_later или выполняют

Должны ли они также иметь метод perform_later или perform или это не имеет значения?

class ExampleJob < ApplicationJob 
    queue_as :default 

    def perform(*args) 
    Example2Job.perform_later 
    Example3Job.perform_later 
    end 
end 

ответ

1

Если вы хотите, чтобы ваши задания выполнялись асинхронно, вы должны использовать perform_later. В противном случае вы можете использовать Job.new.perform или Job.perform_now

+0

Так что, несмотря на то, что инкапсулирующее задание имеет 'perform_later', два вложенных задания будут превзойти это, и задания будут выполняться синхронно? –

+0

Нет, нет. Задание инкапсуляции будет выполняться async, вопрос в том, хотите ли вы, чтобы ваши вложенные задания выполнялись встроенными в один поток/процесс, как инкапсулирующее задание, или вы хотите, чтобы они выполнялись отдельно. –

+0

Хорошо, я его получаю. Поэтому 'perform_later' звучит как наиболее рекомендуемый. –

Смежные вопросы