ExceptionDispatchInfo dispatchInfo=null; try { SomeMethodThatThrowsAnException(); } catch (Exception ex) { dispatchInfo = ExceptionDispatchInfo.Capture(ex); } //Maybe switch to another thread, or just move the dispatchInfo instance around ///... ///At a different location, rethrow the captured exception dispatchInfo.Throw();