跳至内容 跳至搜索

包含用于作业初始化的 perform_later 方法。

方法
J
P

实例公共方法

perform_later(...)

将作业推送到队列中。默认情况下,参数必须是 StringIntegerFloatNilClassTrueClassFalseClassBigDecimalSymbolDateTimeDateTimeActiveSupport::TimeWithZoneActiveSupport::DurationHashActiveSupport::HashWithIndifferentAccessArrayRange 或 GlobalID::Identification 实例,尽管这可以通过添加自定义序列化器来扩展。

返回一个已排队的作业类的实例,该实例在 Job#arguments 或 false 中提供参数,如果排队不成功则返回 false

在尝试排队之后,作业将被传递给一个可选的块。

如果 Active Job 与 Active Record 结合使用,并且 perform_later 在 Active Record 事务中被调用,那么排队将隐式推迟到事务提交之后,或者在回滚时被删除。在这种情况下,perform_later 将返回作业实例,就像它已成功排队一样,但如果回调阻止作业排队,它将仍然返回 false

此行为可以在每个作业的基础上更改

class NotificationJob < ApplicationJob
  self.enqueue_after_transaction_commit = false
end
# File activejob/lib/active_job/enqueuing.rb, line 81
def perform_later(...)
  job = job_or_instantiate(...)
  enqueue_result = job.enqueue

  yield job if block_given?

  enqueue_result
end

实例私有方法

job_or_instantiate(*args, &_)

# File activejob/lib/active_job/enqueuing.rb, line 91
def job_or_instantiate(*args, &_) # :doc:
  args.first.is_a?(self) ? args.first : new(*args)
end