>function par_map(iterable $it, callable $c) {
>  $result = [];
>  async {
>    foreach ($it as $val) {
>      $result[] = $c($val);
>    }
>  }
>return $result;
>}

If the assumption is that each call can be asynchronous and all elements
need to be processed, the only proper tool is a concurrent iterator.
Manually using a foreach loop is not the best idea because the iterator
does not necessarily create a coroutine for each iteration.
And, of course, such an iterator should have a getFuture method that allows
waiting for the result.

Yes, Kotlin has an explicit blocking Scope, but I don’t see much need for
it. So far, all the cases we’re considering fit neatly into a framework:

   1. I want to launch a coroutine and wait: await spawn
   2. I want to launch a coroutine and not wait: spawn
   3. I want to launch a group of coroutines and wait: await CoroutineScope
   4. I want to launch a group of coroutines and not wait: spawn
   5. I want a concurrent iteration: special iterator.

What else are we missing?

Reply via email to