I'm not a fan of the `TrySomething` with out parameter pattern, so I would sooner do the following: while (true) { try { possiblyFailingOperation(); break; } catch (Exception e) { reportError(); if (abortRequested()) throw; } }