【问题标题】:Delay job with lambda使用 lambda 延迟作业
【发布时间】:2015-12-18 04:22:24
【问题描述】:

我需要将 2 个动作发送到后台。我可以写:

myobject.delay.action1
myobject.delay.action2

但我不能确定action2 开始 action1 完成之后,可以吗?

因此,我可以动态创建一个方法。

def action1and2
  myobject.action1
  myobject.action2
end

myobject.delay.action1and2 

但是创建一个命名函数来做这个无意义的组​​感觉很愚蠢,不是吗?

因此,受 JS 的启发,我想写一个 lambda:

-> {
  myobject.action1
  myobject.action2
}

我可以延迟这样的功能吗?或者我的情况有其他选择吗?

【问题讨论】:

  • 如果 action2 需要出现在 action1 之后,那么它们肯定会以某种方式联系起来,并且可以被赋予一个有意义的名称

标签: ruby-on-rails ruby lambda delayed-job


【解决方案1】:
myobject.delay.instance_eval { action1; action2 }

【讨论】:

  • 如何将delayed_job 参数传递给这个?喜欢run_at
  • myobject.delay(run_at: Date.tomorrow).instance_eval { ... }
  • myobject.delay.instance_eval { action1; action2 } 相当于
  • myobject.delay.action1; myobject.delay.action2
【解决方案2】:

创建方法action1and2是正确的方法。

action1and2 将被“后台进程”调用,它会像你预期的那样在单线程中运行。

我可以延迟这样的功能吗?

不,你不能。 检查delay函数,你会发现没有什么神奇的,但它会用参数序列化你的函数调用,在作业过程中反序列化并运行它。 您的内联函数无法序列化。

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 2011-12-14
    • 2022-11-10
    • 2013-06-10
    • 1970-01-01
    • 2012-03-29
    • 2018-08-05
    • 2013-11-26
    • 2015-10-02
    相关资源
    最近更新 更多