private static AsyncContextTransformation <TContext> Compose(AsyncContextTransformation <TContext> f1, AsyncContextHandler <TContext> f2) => async(c, ct) => { var r = await f1(c, ct).ConfigureAwait(false); if (!ct.IsCancellationRequested) { await f2(r, ct).ConfigureAwait(false); } return(r); };
/// <inheritdoc /> public IAsyncCommandBuilder <TContext> Add <TCommand>(TCommand command) where TCommand : IAsyncCommand <TContext> { _sequence = Compose(_sequence, command.ExecuteAsync); return(this); }
public AsyncCommand(AsyncContextTransformation <T> body) => _body = body;
public static IAsyncCommandBuilder <T> AddIf <T>(this IAsyncCommandBuilder <T> builder, Predicate <T> predicate, AsyncContextTransformation <T> action) => builder.Add(new AsyncCommand <T>((i, ct) => predicate(i) ? action(i, ct) : Task.FromResult(i)));
public static IAsyncCommandBuilder <T> Add <T>(this IAsyncCommandBuilder <T> builder, AsyncContextTransformation <T> action) => builder.Add(new AsyncCommand <T>(action));
public static ICommandBuilder <T> Add <T>(this ICommandBuilder <T> builder, AsyncContextTransformation <T> transformation) => builder.Add(new AsyncCommand <T>(transformation).ToSync());