private static void Run(Func <object> func) { var oldSyncContext = SynchronizationContext.Current; try { var asyncSyncContext = new AsyncTestSyncContext(); SetSynchronizationContext(asyncSyncContext); var result = func(); var task = result as Task; if (task != null) { try { task.Wait(); } catch (AggregateException ae) { var innerException = ae.InnerException; ExceptionProcessor.PreserveStackTrace(innerException); throw innerException; } } else { var ex = asyncSyncContext.WaitForCompletion(); if (ex != null) { ExceptionProcessor.PreserveStackTrace(ex); throw ex; } } } finally { SetSynchronizationContext(oldSyncContext); } }