Tôi gặp khó khăn khi hiểu số loopState.Stop()
và loopState.Break()
. Tôi đã đọc MSDN và một số bài viết về nó nhưng tôi vẫn còn bối rối.Dừng và ngắt trong Parallel.For
Điều tôi hiểu là mỗi trình phân vùng lặp lại cung cấp các chỉ mục còn lại cho các luồng để xử lý và loopState.Stop()
dừng tất cả luồng và loopState.Break()
dừng luồng hiện tại.
Tuy nhiên cho phép xem xét sau tình huống:
Parallel.For(0, 100, (i, loopState) =>
{
if (i >= 10)
loopState.Break();
Debug.Write(i);
});
cho vòng lặp này, tôi có kết quả fallowing:
0 25 1 2 3 4 5 6 7 8 9 10
Tôi không có ý tưởng tại sao trong kết quả có 10 và 25 số.
Mọi người đều có thể trợ giúp?
P.S. Tôi có CPU i5 520M (2 lõi => 4 Chủ đề)
Vì vậy, loopState.Break() thoát khỏi tất cả các chủ đề? Tôi sử dụng để điều đó loopState.Stop() hiện nó. –
Để làm rõ bình luận trước đây của tôi: Tôi hiểu bây giờ làm thế nào hai vòng đầu tiên dừng lại nhưng tại sao hai chủ đề khác thậm chí không bắt đầu? Là Break có thể chấm dứt nhiều hơn sau đó một sợi? Nếu vậy nó như thế nào? –
Xem câu trả lời hay về Stop vs Break: http://stackoverflow.com/questions/8818203/what-is-difference-between-loopstate-break-loopstate-stop-and-cancellationt –