std.parallelism: How to wait all tasks finished?

Dan Killebrew dank at gmail.com
Mon Feb 3 19:26:03 PST 2014


>> It seems to me that worker threads will continue as long as 
>> the queue isn't empty. So if a task adds another task to the 
>> pool, some worker will process the newly enqueued task.
>
> No. After taskPool.finish() no way to add new tasks to the 
> queue. taskPool.put will not add new tasks.

Then perhaps you need to create a new TaskPool (and make sure 
that workers add their tasks to the correct task pool), so that 
you can wait on the first task pool, then wait on the second task 
pool, etc.

auto phase1 = new TaskPool();
//make sure all new tasks are added to phase1
phase1.finish(true);

auto phase2 = new TaskPool();
//make sure all new tasks are added to phase2
phase2.finish(true);


More information about the Digitalmars-d-learn mailing list