PracticU

Asynchronous - xxxAsync Function

בלי כתוביותעם כתוביות
PracticU › קורס WCF - תקשורת למתקדמים בדוט-נט › Asynchronous - xxxAsync Function
מילון מושגים:
אסינכרוני - אופן פעולה שבו פעולה ארוכה רצה ברקע והתוכנית ממשיכה בלי להמתין לה, ומטופלת כשתסתיים.
אירוע - התרחשות שהמערכת מזהה ויכולה להגיב לה, כמו לחיצת עכבר, הקשה או סיום פעולה.
פרוקסי - שרת מתווך שמעביר בקשות בין לקוח ליעד, ויכול לשמש להסתרה, לסינון, למטמון או לבקרת גישה.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
טופס - אזור בממשק שבו המשתמש מזין נתונים בשדות ושולח אותם, למשל טופס הרשמה או התחברות.
תהליכון - יחידת ביצוע בתוך תהליך, המאפשרת להריץ כמה מהלכים במקביל ולחלוק את אותו זיכרון.
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.

Asynchronous - xxxAsync Function
השיעור מציג דרך פשוטה יותר לקריאה אסינכרונית: פונקציית xxxAsync ואירוע xxxCompleted, שנוצרים כשמסמנים Generate asynchronous operations.
הגדרה
1. בחלון Advanced מסמנים Generate asynchronous operations.
2. הפרוקסי מכיל פונקציה AddAsync שמחזירה void, ואירוע AddCompleted.
3. מרשמים לאירוע, והתשובה נמצאת ב-e.Result.
4. מעבירים נתונים לאירוע דרך הפרמטר userState. בשיעור נוצרה מחלקה NumbersInfo עם שני המספרים, והאירוע מחלץ אותם בעזרת e.UserState as NumbersInfo.
סגירת השירות
השירות נשאר פתוח כל עוד הטופס פתוח, כי האירוע עדיין צריך אותו. לכן הסגירה נעשית באירוע FormClosing של הטופס, ולא בסוף הלחצן.
בדיקה
1. בטופס לוחצים Add, ואחר כך משנים את הערכים ולוחצים שוב. כל תוצאה מתאימה לערכים שנשלחו אליה, ולא לערכים שנמצאים בתיבות באותו רגע.
2. ההרצה ב-F5 לא מציגה Cross-Thread Exception.
בשיטה הזאת הטופס נשאר פנוי, והתוצאה מגיעה עם הנתונים הנכונים.
השיעור הבא בקורס: Asynchronous - Beginxxx

פרקי ההרצאה: Asynchronous - xxxAsync Function

  1. 00:00

    קריאה אסינכרונית בלי לנהל Thread

  2. 01:04

    הקוד הסינכרוני בתוך כפתור השליחה

  3. 01:43

    אפשרות Generate Asynchronous Operations

  4. 02:36

    פונקציית add Async והאירוע

תמלול ההרצאה: Asynchronous - xxxAsync Function

הטקסט המלא של הדקות הראשונות בהרצאה «Asynchronous - xxxAsync Function» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:20

    כעת אנחנו הולכים לראות איך לבצע את אותו הדבר שביצענו מקודם כלומר קריאה ל-WCF סרוויס שלנו בטרד נפרד אבל בלי לפתוח טרד בעצמנו ובלי לנהל אותו מבחינת הטופס אלא על ידי פונקציות build-in שיכולות להיות קיימות בתוך הסרוויס שלנו אז קודם כל מה שנעשה זה ניפטר מכל הקוד שעשינו מקודם

  2. 00:44

    אין לנו פה את הפונקציה הזאת, בואו נסגור אותה אין לנו פה את ה-invoke, את כל הקוד הזה נכניס בתוך הלחצן, ניפטר מה-delegate שבנינו ובואו נסתכל מה הקוד שיש לנו.

  3. 01:08

    ראשית אנחנו לוקחים את שני המשתנים מתיבות הטקסט לתוך משתנים לוקאליים. לאחר מכן אנחנו פותחים את הסרוויס, קוראים לפונקציה שאנחנו דימינו כאילו שהיא לוקחת הרבה זמן, לוקחים את התשובה ומציגים אותה בלייבל.

  4. 01:24

    בואו נציג אותה בלייבל lbl.result.txt ואז סוגרים את הסרוויס. אוקיי, אז אם אני מסתכל על הסרוויס כרגע אני רואה שאני קראתי בעצמי לפונקציית add וזה הדבר שלוקח הרבה זמן ואם אני קורא לפונקציית add לא משנה מה יקרה זה פשוט דבר שלוקח הרבה זמן כי היא מחזירה לי ערך ואני צריך לחכות עד שהיא תסתיים ואני צריך לקבל את הערך המוחזר לכן אני לא יכול

  5. 01:53

    לקרוא לה בעצמי אבל בתוך הסרוויס אם אני אחקור אותו אני אראה שאין לי פה שום פונקציה אחרת שמאפשרת לי לבצע איזושהי קריאה על ידי טרד או קריאות אסינכרוניות כדי שאני אוכל לקרוא לפונקציה add או לכל פונקציה אחרת בעזרת קריאות אסינכרוניות, אני צריך לחזור להגדרה של ה-service שלנו ולבצע

  6. 02:18

    configuration שלו. כלומר, כאילו שאני הבאתי עכשיו בפעם הראשונה את ה-service והגעתי לטופס של ה-advanced features. ובטופס הזה אני רואה שיש לי כאן checkbox לגבי generate asynchronous operations.

  7. 02:35

    אז בואו נגדיר את ה-generate asynchronous operations הזה. מבצע אוקיי וכעת המערכת כן מייצרת לי בתוך אותו הפרוקסי בתוך הסרוויס הזה פונקציות נוספות אני פתאום רואה שיש לי הרבה יותר פונקציות ממקודם אז בואו נסתכל רגע על הפונקציית add פונקציית add זאת הפונקציה הסטנדרטית שאם אני קורא לה קריאה היא לא מתבצעת בצורה אסינכרונית אלא בצורה סינכרונית ואני

  8. 03:01

    נאלץ לחכות לה אבל פתאום אני רואה שיש לי פה עוד פונקציה שנקראת add כלומר אותו השם שאנחנו הגדרנו לפונקציה שלנו אבל עם הסיומת async זאת פונקציה שפשוט מקבלת את אותו הדבר ואני יכול לקרוא לה והפונקציה הזאת היא מתבצעת בצורה אסינכרונית אבל היא לא מחזירה לי שום דבר אני רואה שהיא מחזירה void ואני לא אקבל כרגע את

  9. 03:25

    ה-result לפונקציה הזאת אבל איך אני באמת מקבל את התשובה בחזרה? אז מה שאני צריך לעשות, אני צריך להירשם לאירוע

לקורס המלא: קורס WCF אונליין בדוט-נט

ההרצאה הקודמת: Asynchronous - Async Call

ההרצאה הבאה: Asynchronous - Beginxxx

הרצאות קשורות מקורסים אחרים

  • What is a Function
  • פונקציה - Function
  • Stored Procedure vs Function
  • מצביעה לפונקציה - Function Pointer

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס תכנות מתקדם - #Advanced .NET C