אני פשוט לא מאמין שקיים Pattern חדש (אולי כבר ישן) נוסף, לפחות ב-.NET 2.0 למימוש קריאות אסינכרוניות. וזה לא ה-Pattern הסטנדרטי: Asynchronous Programming Design Patterns.
קוראים לו: Event-based Asynchronous Pattern
אגב זאת גם הסיבה שהקומפיילר מייצר Proxies לטובת Web Services וכו', ללא זוג המטודות הנוספות שהתרגלנו אליהם: BeginXXX, EndXXX.
אז מה קורה פה?
אם תסתכלו טוב, תמצאו מטודות שמסתיימות עם Async, AsyncCancel, ובנוסף Event שאפשר להרשם אליו, והוא פועל כשההפעלה האסינכרונית הסתיימה (אגב ה-BackgroundWorker תומך ב-Pattern הזה). בגדול, לפחות מבחינת המשתמש ולא העורך, הרבה יותר קל להשתמש ב-Types שתומכים ב-Pattern הזה. מה גם שיותר נכון להרשם ל-Event מאשר למסור Delegate. מבחינה ארכיטקטונית, Delegate מייצג Callback שמתאים יותר לתכנות פרוצדורלי ולא אובייקטלי. בסה"כ הכללי, ה-Pattern החדש גם מרחיב את הפעילות ע"י כך שמציע שיטות לעצור/לבטל את הקריאה האסינכרונית.
איך הגעתי לזה? ממש במקרה. אני בדיוק כותב את הפרק Asynchronous and Multithreading לקורס Essential WPF, ובמקביל קורא להנאתי חומר שקשור לנושא ב-MSDN: Threading Model תחת WPF. בסוף העמוד: Writing Components Using Threading מזכיר את הנושא.
מיד קפצתי לקרוא במה מדובר: http://msdn2.microsoft.com/en-us/library/wewwczdw.aspx.
עכשיו אני שוקל אם להכניס את הנושא לקורס, או לא.
אשמח לקבל רעיונות נוספים, ו/או חוות-דעת.