בעולם של ה-CLR לא קשה לבצע פעולות אסינכרוניות. למשל, כל delegate תומך אוטומטית בהפעלה אסינכרונית ע"י BeginInvoke ו-EndInvoke. מי שצריך לעבוד ללא
delegate יכול להשתמש ב-ThreadPool שלו מספר מתודות סטטיות להפעלת method בצורה אסינכרונית.
הבעיה ב-ThreadPool היא שהינו יחיד. כלומר, אם יש מצב שבו יש באפליקציה שתי סוגי
בקשות, אחת בעדיפות רגילה ואחת בעדיפות גבוהה, הן ייזרקו לאותו תור שמנהל את
הבקשות האסינכרוניות, ואם לדוגמא, יש 100 בקשות רגילות בתור ואז צריך להעביר בקשה
בעדיפות גבוהה, הבקשה תאלץ לחכות עד לטיפול של ה-100 הקודמות (כי ה-ThreadPool לא ייצר 100 Threads). מה עושים?
ב-Windows Vista קיים API חדש המאפשר לייצר Thread Pool פרטי (CreateThreadPool) ולעבוד איתו. לכן, פתרון אחד (בויסטה) יהיה
לעטוף את ה-API בעטיפת דוט נט דרך P/Invoke או C++/CLI.
דרך אחרת היא שימוש בחבילת Robotics Studio. חבילה זו כוללת יכולת לבנות מודלים של רובוטים
(בתוכנה בלבד אן עם חיבור לרובוט פיזי) ושליטה בכל מיני רמות - חבילה מאד מעניינת
כשלעצמה.
בלי קשר לרובוטיקה, החבילה כוללת ספריה שנקראת (CCR (Concurrency and Control Runtime שהיא אוסף של טיפוסים המהווים מנגנון מתוחכם
לניהול של בקשות אסינכרוניות. בין השאר קיימת האופציה לייצר Thread
Pool פרטי ולפתור את בעית הבקשות עם העדיפויות
השונות, ויש שם עוד הרבה דברים טובים שהם הרבה יותר מתוחכמים מאשר ThreadPool.QueueUserWorkItem. היופי הוא שניתן להשתמש ב-CCR ללא כל קשר לרובוטיקה.
מאמר התחלתי טוב ניתן למצוא ב-MSDN magazine בקישור הבא.