תכנות א-סינכורני בC# 5 ומעלה
-
לכל מי שתהה מה זה task, await ו async
אז יש כאן קישור לסרטון מעולה בעברית!! (באורך של שעה וחצי, ההסבר על זה מתחיל בדקה ה20 ), הוא מרחיב בהסבר על ההבדל בין תכנות סינכרוני וא-סינכרוני, ועל החידוש בC#5 (די מיושן.. יש היום כבר 6 :lol:, אבל ההרצאה היא מ2012 למניינם.. ) בקלות השימוש בתכנות אסינכרוני.
הרצאה מעולה, עם הסבר נרחב מאד על השימוש בawait, async וכו'.כמובן, שגם יש לנו כאן בפורום את המדריך המעולה של דוד ל.ט. על תכנות מקבילי ושימוש בThreading, אם כי השימוש בawayt אינו בהכרח קשור לשימוש בטרייד שונה.
לדוגמא, כאשר אנו רוצים לבצע פעולה עם שימוש ברשת (network) ואנו לא יודעים תוך כמה זמן נקבל תשובה וכדו', אז אפשר ליצור טרייד חדש שהוא יבצע את הפעולה הזאת, וכך לא נתקע את הטרייד הראשי (וממילא את כל הUI (באפליקצייה עם UI) וכדו') עד שהתשובה תחזור. אולם, במקרה זה הטרייד המשני הוא זה שמחכה ומחכה, והוא זה שתקוע.. ממילא, אם האפליקציה שלנו רצה על השרת, והשרת מקבל הרבה הרבה קריאות, ובכל קריאה הוא יוצר טרייד חדש לפעולות הללו, אנו יכולים להגיע למצב של עומס על המערכת..
לכן הפתרון של await הוא בעצם לשחרר את הטרייד לבצע מה שהוא רוצה במשך הזמן שהוא מחכה לתשובה, וכשהתשובה תגיע - הוא יקבל הודעה וימשיך מהמקום בו הוא עצר. אמנם, זה היה קיים גם קודם לכן בדוטנט, אם כי זה היה הרבה יותר מסורבל לכתוב דבר כזה, ואילו עכשיו מספיק להגדיר שהמתודה היא async (ואולי גם להוסיף לה task<t> כשT זה בעצם int / string או כל מה שאני רוצה שהמתודה תחזיר..), וממילא כשאני קורא לפעולת הנטוורק לכתוב קודם await שבעצם אני אומר - תחזיר את מה שיש לך עד עכשיו, וכשתקבל תשובה תמשיך מכאן והלאה.
כמובן שזה לא קורה לבד, אלא הקומפיילר מהדר את הקוד ויוצר זאת עבורנו.. אולם, לי בתור מפתח זה מקצר את הקוד, ועושה אותו הרבה יותר בהיר וקל לתחזוקה.פורסם במקור בפורום CODE613 ב13/02/2016 23:35 (+02:00)