2010-08-21 30 views
7

Giả sử bạn có một dãy gồm 1000 số nguyên ngẫu nhiên và bạn cần lặp lại số đó để tìm số 68 chẳng hạn.Parallel.For interruption

Sử dụng Parallel.For mới trên CPU lõi tứ sẽ cải thiện tốc độ đáng kể, làm cho mỗi lõi chỉ hoạt động 250 mục mảng.

Câu hỏi đặt ra là: có thể ngắt vòng lặp Parallel.For khi điều kiện sau được đáp ứng không?

if (integerArray[i] == 68) 

    break; 

Cảm ơn.

Trả lời

9

Nếu bạn muốn dừng lại sau khi lặp đi lặp lại thực hiện hành được thực hiện (nhưng lặp đi lặp lại trước khi dòng điện sẽ được thực hiện - có nghĩa là, lặp đi lặp lại có chỉ số thấp hơn = i)

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

hoặc nếu bạn muốn dừng sau khi hiện tại và giao thoa trước điều này (về chỉ số = i) cũng phải dừng

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

nhưng trong trường hợp này, bạn nên kiểm tra xem công việc có bị hủy bỏ hay không nếu lặp đi lặp lại có thể mất một thời gian

s.ShouldExitCurrentIteration 

đọc thêm ở đây Parallel.For Method (Int32, Int32, Action(Int32, ParallelLoopState))

+0

Tôi trộn lẫn một số khái niệm về 'Break' và' Stop' - hãy đọc lại câu trả lời :) –

2

Nghe có vẻ với tôi rằng bạn nên nhìn vào PLINQ (song song LINQ) để thực hiện truy vấn song song, thay vì song song cho.
http://msdn.microsoft.com/en-us/library/dd460688.aspx

+0

đúng cho điều này (đơn giản) ví dụ. Nhưng nó là một câu hỏi tổng quát hơn. –

Các vấn đề liên quan