Beispiel #1
0
        public static ParallelTaskWrapper <TRes> SelectMany <TCur, TNext, TRes>(this ParallelTaskWrapper <TCur> source, Func <TCur, SequentialTaskWrapper <TNext> > exec, Func <TCur, TNext, TRes> mapper)
        {
            async Task <TRes> GetResult()
            {
                var arg1 = await source;
                var arg2 = await exec(arg1).Task;

                return(mapper(arg1, arg2));
            }

            return(new ParallelTaskWrapper <TRes>(GetResult()));
        }
Beispiel #2
0
        public static ParallelTaskWrapper <TRes> SelectMany <TCur, TNext, TRes>(this ParallelTaskWrapper <TCur> source, Func <TCur, ParallelTaskWrapper <TNext> > exec, Func <TCur, TNext, TRes> mapper)
        {
            ParallelTaskWrapper <TNext> nextWrapper;

            try
            {
                nextWrapper = exec(default(TCur));
            }
            catch (NullReferenceException e)
            {
                throw new Exception(NotResolvedParamErrorText, e);
            }

            async Task <TRes> GetResult()
            {
                var arg1 = await source.Task;
                var arg2 = await nextWrapper.Task;

                return(mapper(arg1, arg2));
            }

            return(new ParallelTaskWrapper <TRes>(GetResult()));
        }
Beispiel #3
0
 public static TaskAwaiter <T> GetAwaiter <T>(this ParallelTaskWrapper <T> source)
 => source.Task.GetAwaiter();
Beispiel #4
0
 public static ParallelTaskWrapper <TRes> Select <TCur, TRes>(this ParallelTaskWrapper <TCur> source, Func <TCur, TRes> mapper)
 {
     return(new ParallelTaskWrapper <TRes>(source.Task.ContinueWith(t => mapper(t.Result))));
 }