2017-01-25 77 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

如果他們都試圖摧毀同一數據庫中的記錄,是的,有可能是一個競爭條件。通常你會拯救並忽略錯誤。