มีเทียบเท่ากับ 'ดำเนินการต่อ' ใน Parallel.ForEach หรือไม่


249

ฉันกำลังย้ายรหัสไปยังParallel.ForEachและได้รับข้อผิดพลาดเมื่อcontinueฉันมีรหัส มีบางสิ่งที่เทียบเท่าฉันสามารถใช้ในParallel.ForEachฟังก์ชันที่เทียบเท่ากับcontinueในforeachลูปหรือไม่?

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

คำตอบ:


414
return;

(ร่างกายเป็นเพียงฟังก์ชั่นที่เรียกสำหรับแต่ละรายการ)


23

เมื่อคุณแปลงลูปของคุณเป็นคำจำกัดความที่เข้ากันได้สำหรับตรรกะ Parallel.Foreach คุณจะสร้างแลมบ์ดาคำสั่งขึ้นมา นั่นคือการกระทำที่ถูกเรียกโดยฟังก์ชั่น Parallel

ดังนั้นแทนที่continueด้วยreturnและทำลายด้วยStop()หรือBreak()งบ


1
ตัวเลือกที่เป็นไปได้ที่ดีกว่าการแทนที่ตัวแบ่งด้วยคำสั่ง return คือ ParallelLoopState's Stop () และ Break () blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder

ไม่มี @JasonCoder ของผู้ที่จะเทียบเท่ากับcontinueว่า
จะ

1
@ จะถูกต้องซึ่งเป็นเหตุผลที่ฉันบอกว่าหยุดพัก ข้อความสั่ง return จะเข้าแทนที่ข้อความต่อไป
JasonCoder

@JasonCoder - Ah ฉันเข้าใจผิดว่าคุณหมายถึงอะไรอ๊ะ
จะ

-1

หากต้องการดำเนินการต่อหมายถึงการข้ามส่วนที่เหลือของบล็อกและย้ายไปยังรายการถัดไป ดังนั้นคุณสามารถดำเนินการต่อโดยใช้เงื่อนไขตรงข้ามกับส่วนที่เหลือของบล็อก

ตัวอย่างเช่นรหัสในคำถามจะถูกเขียนใหม่เป็น:

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
    }

});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.