Multiple delayed jobs using in a ruby class

I have one sudo code here, using delayedjob with rails, actually tired but in some cases it getting weird, i want to call the first delay
and after that is finished, then only start second delay, so i have used the priority. Is this the proper way to do this or is anything wrong?

class Core
  def foo
priority = 0
    if condition1
if condition2
self.delay(priority: priority).foo1(priority)
      end
      self.delay(priority: priority).foo1(priority)
    end
  end

  def foo1(priority)
    if condition1
if condition2
priority +=1
        self.delay(priority: priority).foo1(priority)
      end
      priority +=1
      self.delay(priority: priority).foo1(priority)
    end
  end
end

If you want to sequence the jobs why not just make it one job where the second “job” is just a method call? One important purpose of asynchronous jobs like this is to get them out of the way of a main loop. By making it one job you’ve done that so there’s no obvious (so far) pressure to punt the other one since you’re not in that main loop any more.

Your pseudo code leaves me with more questions than answers so maybe explain what you’re trying to actually do?

Hi, thanks for the response paul, actually i am trying to do export the csv, so that will take bit time to getting data and push to s3 that’s why i put the delay, so one delay is fine to doing this long job? is this the normal way basically i am get rid of this multiple delay, because some times it wrap up wrong data

You could try something like,

def export_csv_and_push_to_s3

  export_to_csv unless csv_exists?

  push_to_s3

The fact it takes a long time shouldn’t matter (so long as you’ve set your DJ timeout appropriately). Presumably you’re storing your CSV somewhere locally and your object has a way of retrieving that (csv_exists?) If any part of export_csv_and_push_to_s3 fails it’ll skip the CSV generation next time if it has completed it already.

You could optionally delay push_to_s3 altho I’m not really seeing the benefit.

Either way you definitely should not (IMO) be attempting to orchestrate some sequence during the original job scheduling.