לדלג לתוכן

תרגול כשל באמצע רכישה

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

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

הסבירו מדוע finalizer שמפעיל Console.WriteLine ומשחרר רשימת IDisposable מנוהלת אינו פתרון כללי לבעיה, ומדוע thread safety של Dispose אינה נובעת מעצם קיום הממשק.