2017-01-25 28 views
0

在侧面执行方法中调用AC销毁安全吗?我有这种方法,它会循环通过设备并发送通知,如果失败,它将在抢救中摧毁该设备。Sidekiq尝试在执行方法中销毁对象的最佳做法

是否有可能一个线程在此行“devices = Device.where(id:device_ids)”后暂停,并且线程B销毁由线程A暂停的相同设备对象,当线程A恢复时,“devices”将为已经销毁?如何解决这个问题>

def perform(device_ids, message) 
    devices = Device.where(id: device_ids) 
    devices.each do |device| 
    begin 
     device.send_notification(message) 
    rescue Aws::SNS::Errors::EndpointDisabled 
     device.destroy 
    end 
    end 
end 

回答

2

如果他们都试图摧毁同一数据库中的记录,是的,有可能是一个竞争条件。通常你会拯救并忽略错误。