在侧面执行方法中调用AC destroy是否安全?我有这种方法,它将循环通过设备并发送通知,如果失败,它将在救援中销毁该设备。
是否可能在此行“devices = Device.where(id:device_ids)”之后暂停一个线程A并且线程B销毁线程A暂停的相同设备对象,当线程A恢复时,“设备”将已经摧毁?如何处理这个问题>
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
答案 0 :(得分:2)
如果他们都试图破坏相同的数据库记录,是的,可能存在竞争条件。通常你会拯救并忽略错误。