public static ICommandBuilder <T> Add <T>(this ICommandBuilder <T> builder, AsyncContextHandler <T> action) => builder.Add(new AsyncCommand <T>(async(c, ct) => { await action(c, ct).ConfigureAwait(false); return(c); }).ToSync());
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); };
public static IAsyncCommandBuilder <T> AddIf <T>(this IAsyncCommandBuilder <T> builder, Predicate <T> predicate, AsyncContextHandler <T> action) => builder.Add(new AsyncCommand <T>(async(i, ct) => { if (predicate(i)) { await action(i, ct).ConfigureAwait(false); } return(i); }));