当前位置 : 主页 > 编程语言 > ruby >

Ruby中的非阻塞定时事件,如JavaScript setTimeout

来源:互联网 收集:自由互联 发布时间:2021-06-23
我需要在初始化后几分钟更改类的属性.我试图在函数内部使用sleep,但它延迟了所有事情的执行: active = truedef deactivate sleep 120 puts 'deactivate' active = falseenddeactivateputs active 我希望会发生的
我需要在初始化后几分钟更改类的属性.我试图在函数内部使用sleep,但它延迟了所有事情的执行:

active = true

def deactivate
  sleep 120
  puts 'deactivate'
  active = false
end

deactivate
puts active

我希望会发生的事情是真的会先退出然后两分钟后停用会记录.但是,发生的情况是停用,然后在两分钟后错误注销.

在JavaScript中我会做类似的事情:

var active = true;
setTimeout(function(){
  console.log('deactivate');
  active = false;
},120000);
console.log(active);
对于此任务看起来有点过分,但您可以使用 delayed_job异步运行未来时间的任务.

def deactivate
     puts 'deactivate'
     active = false
  end

  active = true
  handle_asynchronously :deactivate, :run_at => Proc.new { 2.minutes.from_now }
网友评论