Có tương đương với 'tiếp tục' trong Parallel.ForEach không?


249

Tôi đang chuyển một số mã đến Parallel.ForEachvà gặp lỗi với mã continuetôi có trong mã. Có một cái gì đó tương đương tôi có thể sử dụng trong một Parallel.ForEachchức năng tương đương với continuetrong một foreachvòng lặp?

Parallel.ForEach(items, parallelOptions, item =>
{
    if (!isTrue)
        continue;
});

Câu trả lời:


414
return;

(cơ thể chỉ là một chức năng được gọi cho mỗi mục)


23

Khi bạn chuyển đổi vòng lặp của mình thành một định nghĩa tương thích cho logic Parallel.Foreach, cuối cùng bạn đã biến phần thân câu lệnh thành lambda. Vâng, đó là một hành động được gọi bởi hàm Parallel.

Vì vậy, thay thế continuebằng return, và phá vỡ bằng Stop()hoặc Break()tuyên bố.


1
Một tùy chọn tốt hơn có thể thay thế các ngắt bằng các câu lệnh return là ParallelLoopState's Stop () và Break (). blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder

@JasonCoder không ai trong số đó là tương đương với continuemặc dù.
sẽ

1
@ sẽ đúng, đó là lý do tại sao tôi nói nghỉ. báo cáo trả lại thay thế các báo cáo tiếp tục
JasonCoder

@JasonCoder - À. Tôi hiểu nhầm ý của bạn, rất tiếc.
sẽ

-1

Để tiếp tục, nó có nghĩa là bỏ qua phần còn lại của khối và di chuyển đến mục tiếp theo. Vì vậy, bạn có thể thực hiện tiếp tục bằng cách áp dụng điều kiện ngược lại với phần còn lại của khối.

Ví dụ: mã trong câu hỏi sẽ được viết lại thành:

Parallel.ForEach(items, parallelOptions, item =>
{
    //Skip an item by applying the opposite condition used for continue on all items until the end of the foreach

    if (isTrue) 
    {
      //Do what you want to do for all items
    }

});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.