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();