CleanupSample skeleton
Should execute delegate and pass self as param
Should execute cleanup steps in opposite order after delegate
Should execute cleanup steps on sync exception in delegate and complete with exception
Should execute cleanup steps on async exception in delegate and complete with exception
Should execute all cleanup steps despite sync exception in cleanup and complete with exception
Should execute all cleanup steps despite async exception in cleanup and complete with exception
Should execute all cleanup steps despite async exceptions in run and cleanup and complete with all exceptions
Blocking.Task Should return sync func
Refactoring - use Register method to add cleanup step
Adding sample CleanupGuard app
Use TraceSource for logging