public static Task SyncOrAsyncMethod(Action syncFunc, Func <Task> asyncFunc, SyncAsyncMode mode) { switch (mode) { case SyncAsyncMode.Sync: syncFunc(); return(Task.CompletedTask); case SyncAsyncMode.SyncOverAsync: Task t = asyncFunc(); WaitAndUnwrapException(t); return(t); case SyncAsyncMode.Async: return(asyncFunc()); default: throw new ArgumentException(mode.ToString()); } }
public static Task <TResult> SyncOrAsyncMethod <TResult>(Func <TResult> syncFunc, Func <Task <TResult> > asyncFunc, SyncAsyncMode mode) { switch (mode) { case SyncAsyncMode.Sync: TResult result = syncFunc(); return(Task.FromResult(result)); case SyncAsyncMode.SyncOverAsync: Task <TResult> t = asyncFunc(); WaitAndUnwrapException(t); return(t); case SyncAsyncMode.Async: return(asyncFunc()); default: throw new ArgumentException(mode.ToString()); } }