예제 #1
0
        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());
            }
        }
예제 #2
0
        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());
            }
        }