Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parallel.For interruption

Suppose you have an array of 1000 random integer numbers and you need to loop over it to find the number 68 for example.

Using the new Parallel.For on a quad core CPU would improve speed considerably, making each core to work only 250 array items.

The question is: is it possible to interrupt the Parallel.For loop when the following condition is met?

if (integerArray[i] == 68)

   break;

Thanks.

like image 246
abenci Avatar asked Aug 21 '10 20:08

abenci


2 Answers

If you want to stop after the current executing iteration are done (but iterations before the current WILL be executed - that is, the iterations with a lower index = i)

Parallel.For(0, 100, (i, s) =>
    {
        s.Break();
    });

or if you want to stop after the current and interations before this (in terms of index = i) should also stop

Parallel.For(0, 100, (i, s) =>
    {
        s.Stop();
    });

but in BOTH cases it is good practice to check if the work should be aborted if the iteration can take a while

s.ShouldExitCurrentIteration

read more here Parallel.For Method (Int32, Int32, Action(Int32, ParallelLoopState))

like image 56
Lasse Espeholt Avatar answered Nov 11 '22 08:11

Lasse Espeholt


It sounds to me that you should look into PLINQ (Parallel LINQ) to execute a parallel query, rather than a parallel for.
http://msdn.microsoft.com/en-us/library/dd460688.aspx

like image 2
Mathias Avatar answered Nov 11 '22 08:11

Mathias