2010-08-21 6 views
7

배열에 1000 개의 임의의 정수가 있고 그 루프를 반복하여 숫자 68을 찾으려한다고 가정 해보십시오.Parallel.For interruption

쿼드 코어 CPU에서 새로운 Parallel.For를 사용하면 속도가 크게 향상되어 각 코어가 250 개의 배열 항목 만 사용할 수 있습니다.

질문 : 다음 조건이 충족 될 때 Parallel.For 루프를 인터럽트 할 수 있습니까?

if (integerArray[i] == 68) 

    break; 

감사합니다.

답변

9

현재 실행 반복 한 후 중지하려면
완료 (그러나 현재 전 반복이 실행됩니다 - 즉, 낮은 인덱스와 반복 = I)

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

경우 또는 당신은 (= 내가 지수 기준)도

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

하지만 두 경우 모두이 작업이 중단되어야하는지 확인하는 것이 좋습니다 중지해야이 전에 현재와 interations 후 중지하려면 반복은

s.ShouldExitCurrentIteration 

더 여기 Parallel.For Method (Int32, Int32, Action(Int32, ParallelLoopState))

+0

'Break'와'Stop'에 대한 몇 가지 개념을 섞어서 - 답을 다시 읽어주세요 :) –

2

평행선이 아닌 병렬 쿼리를 실행하려면 PLINQ (Parallel LINQ)를 조사해야한다고 들었습니다. http://msdn.microsoft.com/en-us/library/dd460688.aspx

+0

수정이 (단순) 예를 들어, 읽을 시간이 걸릴 수 있다면. 그러나 더 일반적인 질문입니다. –

관련 문제