כשעובדים עם Task ההמלצה של MSDN היא לתפוס את ה Exceptions ע"י Wait בתוך try-catch
מה שגורם לסרבול של הקוד , ובנוסף תוקע את ה task במקום לעבוד אסינכרוני.
כתבתי extension method שמאפשר לעשות logging ולטפל ב exception במקום אחד מרכזי.
ע"י שימוש ב HandleExceptionAsync
Task.Factory.StartNew(() => { throw new Exception("test exception"); }).HandleExceptionAsync();
הדוגמא שלי גם רושמת ל logger שהוא חלק מהפרויקט שלי.
בנוסף ניתן להירשם ל event שיעלה בכל פעם שיש exception:
TaskHandlerExtensions.TaskExceptionRaised += t => { //process here the exception...
//t.Exception }; Task.Factory.StartNew(() => { throw new Exception("test exception"); }).HandleExceptionAsync();
את הקוד המלא ניתן להוריד מכאן (העליתי את כל הקוד כי אני עובד עם תשתית logging ) הקובץ הספציפי נמצא ב:
Diagnostics\Roniz.Diagnostics.Logging\TaskHandlerExtensions.cs
או ניתן להורדה מכאן רק את הקובץ הספציפי ולשנות אם יש צורך את ה dependency ל ILog
אין תגובות:
הוסף רשומת תגובה