KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Suppose I have two functions DoTaskA and DoTaskB —both capable of throwing TaskException —with their corresponding "rollback" functions UndoTaskA and UndoTaskB . What is the best pattern to use so that either both succeed or both fail? The best I have now is bool is_task_a_done = false, is_task_b_done = false; try { DoTaskA(); is_task_a_done = true; DoTaskB(); is_task_b_done = true; } catch (TaskException &e) { // Before rethrowing, undo any partial work. if (is_task_b_done) { UndoTaskB(); } if (is_task_a_done) { UndoTaskA(); } throw; } I know that is_task_b_done is unnecessary, but maybe good to show code symmetry in case we add a third or a fourth task later on. Don't like this code because of the auxiliary boolean variables. Perhaps there is something in the new C++11 that I'm not aware of, which can code this up more nicely?
Tags (comma-separated)
Save Edits
Cancel