האם ForEach מקביל אסינכרן?
האם ForEach מקביל אסינכרן?

וִידֵאוֹ: האם ForEach מקביל אסינכרן?

וִידֵאוֹ: האם ForEach מקביל אסינכרן?
וִידֵאוֹ: Is Parallel.For/ForEach in C# actually worth it? (and how to modernize it) 2024, נוֹבֶמבֶּר
Anonim

כל הרעיון מאחורי מַקְבִּיל . לכל אחד () הוא שיש לך קבוצה של שרשורים וכל שרשור מעבד חלק מהאוסף. כפי ששמת לב, זה לא עובד עם אסינכרון - await, איפה אתה רוצה לשחרר את השרשור למשך ה- אסינכרון שִׂיחָה. לכל אחד (), שתומך אסינכרוני המשימה טובה.

בקשר לזה, איך מחכים עד להשלמת Foreach מקביל?

אתה לא צריך לעשות שום דבר מיוחד, מַקְבִּיל . לכל אחד () יהיה לַחֲכוֹת עד שכל המשימות המסועפות שלו יהיו לְהַשְׁלִים . מהשרשור הקורא אתה יכול להתייחס אליו כאל אמירה סינכרונית אחת ולדוגמה לעטוף אותו בתוך try/catch. אתה לא צריך את זה עם מַקְבִּיל.

באופן דומה, האם כל אחד מהם הוא אסינכרוני? זה לא אסינכרוני . זה חוסם. אלה שלמדו לראשונה שפה כמו Java, C או Python לפני שהם מנסים JS יתבלבלו כאשר הם ינסו להכניס עיכוב שרירותי או קריאת API בגוף הלולאה שלהם.

לצד זה, איך ממשיכים במקביל?

כשהמרת את הלולאה שלך להגדרה תואמת עבור ה מַקְבִּיל . לכל אחד ההיגיון, בסופו של דבר הפכת את גוף ההצהרה למבדה. ובכן, זו פעולה שנקראת על ידי מַקְבִּיל פוּנקצִיָה. אז, להחליף לְהַמשִׁיך עם return, ו-break עם הצהרות Stop() או Break().

האם המשימה WhenAll מקבילה?

היישומון של WhenAll מחזיר סינגל מְשִׁימָה זה לא שלם עד כל מְשִׁימָה באוסף הושלם. ה משימות נראה לרוץ פנימה מַקְבִּיל , אך לא נוצרים שרשורים נוספים. ה משימות יכול להשלים בכל סדר.

מוּמלָץ: