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)); }
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)); }
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))); } }
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)); }
public Task <Terminator <TReduction> > InvokeAsync(TReduction reduction, TInput value) => Next.InvokeAsync(reduction, value);