Hi,

I want to spawn several similar tasks and then wait for all of them to complete to go on do some other things, like:

```d
void task(int id)
{
  // do the stuff
}

void main()
{
  foreach (i; 0..10) {
    spawn(&task, i);
  }
  wait(?); // wait for all task to complete
  doSomeOtherThings();
}
```

But I don't see a `wait` method for Tid, similar to Pid in std.process.

What is the idiomatic way to do these things?

My current workaround is using messages:

```d
#!/usr/bin/rdmd
import std.stdio;
import std.concurrency;

void child(int id)
{
        writeln("Starting child: ", id);
        ownerTid.send(id);
}

void main()
{
        foreach (i; 0..10)
        {
                spawn(&child, i);
        }
        for (int n = 0; n < 10; ++n) {
                receive((int i) {
                        writeln("Received:", i);
                });
        }
}
```

But it is verbose and seems error prone.

Reply via email to