title: Schedule Celery task to run after other task(s) complete
body: <p>I want to accomplish something like this:</p>
  
  <pre><code>results = []
  for i in range(N):
      data = generate_data_slowly()
      res = tasks.process_data.apply_async(data)
      results.append(res)
  celery.collect(results).then(tasks.combine_processed_data())
  </code></pre>
  
  <p>ie launch asynchronous tasks over a long period of time, then schedule a  dependent task that will only be executed once all earlier tasks are complete. </p>
  
  <p>I've looked at things like <code>chain</code> and <code>chord</code>, but it seems like they only work if you can construct your task graph completely upfront.</p>