PracticU

Asynchronous - Beginxxx

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

Asynchronous - Beginxxx
השיעור מציג את השיטה השלישית לקריאה אסינכרונית, באמצעות פונקציות BeginXXX ו-EndXXX שהפרוקסי יוצר אוטומטית.
עקרון הפעולה
1. לכל פעולה בשירות יש גרסת Begin, למשל BeginAdd. היא מקבלת את הפרמטרים, פונקציית callback ואובייקט מצב (state). הטיפוס של ה-callback הוא AsyncCallback.
2. פונקציית ה-callback מקבלת IAsyncResult. מתוכה קוראים ל-EndAdd עם אותו אובייקט, והיא מחזירה את התשובה בטיפוס המקורי של הפונקציה.
3. אובייקט המצב נקרא דרך AsyncState. בשיעור הוא שימש לשמירת שני המספרים של הקריאה.
עדכון הטופס
לאחר שהתשובה חוזרת מהשרת, פונקציית ה-callback רצה בטרד אחר. לכן כדי לעדכן את הלייבל משתמשים באותה שיטה של Invoke עם Action שמקבל מחרוזת, בדומה לשיעור הקודם.
בדיקה
בהרצה עם כמה קריאות התוצאות נכונות. בהרצה ב-F5 מופיעה שגיאת Cross-Thread אם לא משתמשים ב-Invoke.
לפי ההסבר בשיעור, שיטת האירוע היא הפשוטה ביותר, אבל גם שיטת Begin/End עובדת כשמטפלים נכון בטרדים.
השיעור הבא בקורס: בחירה נכונה של WCF Binding

פרקי ההרצאה: Asynchronous - Beginxxx

  1. 00:00

    שיטה שלישית לקריאה אסינכרונית

  2. 01:14

    קריאת BeginAdd עם AsyncCallback

  3. 01:56

    פונקציית Completed ו-AsyncState

  4. 03:10

    הצגת התוצאה מתוך IAsyncResult

תמלול ההרצאה: Asynchronous - Beginxxx

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

  1. 00:20

    כעת אנחנו הולכים לראות שיטה שלישית לבצע קריאות אסינכרוניות ל-WCF סרוויס שלנו. אז בואו נסתכל על הקוד של הווינפורם ונראה שמה שעשינו זה פשוט נרשמנו לאירוע שנקרא add completed כאשר add זה השם של הפונקציה שבנינו ואז קראנו לפונקציה על ידי add async כלומר לא קראנו לפונקציה add אלא קראנו לפונקציה add async שמפעילה את

  2. 00:46

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

  3. 01:01

    אז ניפטר כרגע משתי הקריאות האלה, מהרישום לאירוע ומהקריאה ל-add async, ניפטר מהם. נשים את זה בהערה כי עוד מעט נשתמש עם הקוד הזה.

  4. 01:14

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

  5. 01:40

    אותם משתנים של הפונקציה add אז אנחנו שולחים את num1 ואת num2 לאחר מכן היא מקבלת delegate שמצביע לפונקציה שהמערכת הולכת לקרוא לה כאשר תתקבל תשובה מהשר"ט זאת אומרת שהדלגייט הזה הוא איפשהו מחליף את האירוע שהיה מקודם.

  6. 02:02

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

  7. 02:15

    לאחר מכן הוא מקבל איזשהו אסינק סטייט שזה דומה ל-user state ששלחנו. זאת אומרת מידע נוסף שאנחנו רוצים להעביר לפונקציה completed כאשר תתבצע תשובה מהשראת. ואנחנו רוצים להעביר את num.info כי num.info מחזיק לנו פרמטרים שקשורים לקריאה הנוכחית.

  8. 02:37

    אז בואו נבנה את הפונקציה completed. יש לנו פה private void completed והפונקציה הזאת צריכה לקבל אובייקט מטיפוס שימו לב איך הוא נקרא אם אנחנו פותחים פה סוגריים הטיפוס שלה ו-i async result אנחנו יכולים לראות כאן שהיא מחזירה void והיא מקבלת i async result תכף אנחנו נראה מה אנחנו עושים איתו async זאת אומרת שהפונקציה הזאת completed הולכת להתבצע כאשר המידע

  9. 03:10

    מוחזר מהשרת כאשר יש תשובה אז מה אנחנו הולכים לעשות אנחנו רוצים ללכת ללייבל שלנו lblresult.txt ולהכניס אליה את המידע שהתקבל אוקיי בואו נחלק את המידע ולחלקים אז יש לנו ראשית את הריזולט שהתקבל לפונקציה בריזולט שהתקבל לפונקציה אנחנו רואים שיש לנו את האסינק סטייט שנשלח האסינק סטייט זה

  10. 03:41

    אובייקט, אנחנו רוצים להחליף אותו לאובייקט האמיתי שנשלח

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

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

ההרצאה הבאה: בחירה נכונה של WCF Binding

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

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