title: Launch a number of coroutines and join them all with timeout (without cancelling)
body: <p>I need to launch a number of jobs which will return a result.</p>
  
  <p>In the main code (which is <em>not</em> a coroutine), after launching the jobs I need to wait for them all to complete their task <strong><em>OR</em></strong> for a given timeout to expire, whichever comes first.</p>
  
  <p>If I exit from the wait because all the jobs completed before the timeout, that's great, I will collect their results.</p>
  
  <p>But if some of the jobs are taking longer that the timeout, my main function needs to wake as soon as the timeout expires, inspect which jobs did finish in time (if any) and which ones are still running, and work from there, <em>without</em> cancelling the jobs that are still running.</p>
  
  <p>How would you code this kind of wait?</p>