This is a mirror of official site: http://jasper-net.blogspot.com/

Task Parallelism benefits

| Tuesday, February 28, 2012
בפוסט זה אסביר מה הם היתרונות בשימוש ב- System.Threading.Tasks.Task אשר זמין החל מ-.net framework 4.0 ומדוע כבר אין כל סיבה לעבוד מול System.Threading.Thread, אך תחילה אסביר מי מחלקה זו ומתי נרצה להשתמש בה.

אנו נרצה להשתמש במחלקה זו במקרים בהם נרצה לבצע פעולות במקביל, כאשר זה מאפשר למפתחים למנף את העוצמה של מעבדים מרובי ליבה בצורה יעילה

ה-Task הוא אובייקט קל-משקל לניהול יחידות עבודה אשר עובדות במקביל, הוא מונע את התקורה של יצירת Thread ייעודי לכל פעולה אשר צריכה להתבצע במקביל, במקום זאת הוא עובד מול ה-thread pool (גם ThreadPool.QueueUserWorkItem משתמש באותו ה-thread pool) ומספק לדורש thread אשר זמין לעבודה (זוהי ההתנהגות הדיפולטיבית, ניתן להגדיר אחרת)

לדעתי אלו היתרונות המרכזיים של השימוש ב-Task:

Waiting on Tasks
Handling Exceptions in Tasks
Return a Value from a Task
Canceling Tasks
Continuation Tasks
Waiting on Tasks 

כאשר לדוגמא אנו רוצים שהתכנית שלנו תחכה לכל הפעולות הקורות במקביל ותסתיים רק לאחר שכל הפעולות הסתיימו נשתמש בפונקציה הסטאטית Task.WaitAll אשר יכולה גם מוגבלת בזמן ע”י טיים אאוט או לחילופין ע”י הפונקציה Task.WaitAny אשר תחכה לאחת מן הפעולות

   1: public static void Main()
   2: {
   3:     Task task1 = new Task(printDate);
   4:  
   5:     Task task2 = new Task(printDate);
   6:  
   7:     task1.Start();
   8:     task2.Start();
   9:     Task.WaitAll(task1, task2);
  10:  
  11:     Console.WriteLine("End of the program");
  12:  
  13: }
  14: private static void printDate()
  15: {
  16:     Console.WriteLine(DateTime.UtcNow.ToString("dd/MM/yyyy HH:mm:ss:fff"));
  17: }

פלט התוכנית:

27/02/2012 08:01:13:539 
27/02/2012 08:01:13:539 
End of the program 
Press any key to continue . . .

Handling Exceptions in Tasks 

ניתן לתפוס כל Exception הנזרק בפעולה המקבילה בצורה קלה מאוד, רק צריך לעטוף את פונקציית ה-Wait ע”י try catch ובמידה ונזרק שם Exception כלשהוא אזי הוא ייעטף ב-AggregateException אשר מכיל בתוכו את כל ה-Excetions אשר נזרקו משם, שוב פשוט וקל

QR: Inline image 1

Posted via email from Jasper-net

0 comments: