Exemplo n.º 1
0
                public async Task <Terminator <TReduction> > InvokeAsync(TReduction reduction, TResult value)
                {
                    var terminator = await Next.InvokeAsync(reduction, value).ConfigureAwait(false);

                    var terminated = CheckTermination(terminator);

                    return(Reduction(terminator.Value, terminated: terminated));
                }
Exemplo n.º 2
0
            public override async Task <Terminator <TReduction> > InvokeAsync(TReduction reduction, TInput value)
            {
                var result = await Next.InvokeAsync(reduction, value).ConfigureAwait(false);

                if (result.IsTerminated)
                {
                    return(result);
                }

                return(await Loop.InvokeAsync(reduction, value).ConfigureAwait(false));
            }
Exemplo n.º 3
0
 public override async Task <Terminator <TReduction> > InvokeAsync(TReduction reduction, TInput value)
 {
     try
     {
         return(await success.InvokeAsync(reduction, value));
     }
     catch (TException exception)
     {
         return(await exceptional.InvokeAsync(
                    reduction,
                    new ExceptionalInput <TInput, TException>(value, exception)));
     }
 }
Exemplo n.º 4
0
        public static async Task <Terminator <TReduction> > ReduceAsync <TInput, TReduction>(
            this IEnumerable <TInput> input,
            TReduction reduction,
            IAsyncReducer <TReduction, TInput> reducer)
        {
            var terminator = Terminator.Reduction(reduction);

            foreach (var value in input)
            {
                terminator = await reducer.InvokeAsync(terminator.Value, value).ConfigureAwait(false);

                if (terminator.IsTerminated)
                {
                    return(terminator);
                }
            }

            return(await reducer.CompleteAsync(terminator.Value).ConfigureAwait(false));
        }
Exemplo n.º 5
0
 public Task <Terminator <TReduction> > InvokeAsync(TReduction reduction, TInput value) =>
 Next.InvokeAsync(reduction, value);