On Monday, 28 May 2018 at 21:04:21 UTC, Dr.No wrote:
                import std.parallelism : parallel;
                foreach(t; parallel(arr))
                {
                        if(!doSomething(t)) {
                                return false;
                        }
                }

It reuturns the run time error:

std.parallelism.ParallelForeachError@(0): Cannot break from a parallel foreach loop using break, return, labeled break/continue or goto statements.

What's the proper way to break from loop?

By the time you try to break out of the loop, you've already executed the loop body for later elements in the collection. So if you could do that, it would give the wrong impression.

The loop body executes on several threads at once. The `return false` statement might be executing on a different thread, and `return` only returns on the same thread.

If you want to do this sort of thing (exit on first error, for instance), you can manually use TaskPool, schedule tasks on it, and use an atomic variable to exit early on each task if necessary.

Reply via email to