/// <summary>
        ///     Creates a new Composer, which can be used to compose a task chain, which can be added to an
        ///     existing composer as a single task. Note that this executes on the task chain, and not immediately.
        /// </summary>
        /// <typeparam name="T">The payload type</typeparam>
        /// <param name="composer">The existing composer</param>
        /// <param name="callback"></param>
        /// <returns></returns>
        public static Composer <T> ComposeTask <T>(this Composer <T> composer, Action <Composer> callback)
        {
            composer.ExecuteAsync(async(payload, cancellationToken) =>
            {
                await ComposerFactory.Compose(callback, composer.CancellationToken);

                return(composer.Payload);
            });

            return(composer);
        }
        /// <summary>
        ///     Creates a new Composer, which can be used to compose a task chain, which can be added to an
        ///     existing composer as a single task. Note that this executes on the task chain, and not immediately.
        /// </summary>
        /// <typeparam name="T">The payload type</typeparam>
        /// <typeparam name="TPayload">The child payload type</typeparam>
        /// <param name="composer">The existing composer</param>
        /// <param name="payload">The child payload</param>
        /// <param name="callback"></param>
        /// <returns></returns>
        public static Composer <T> ComposeTask <T, TPayload>(this Composer <T> composer, Func <T, TPayload> payload,
                                                             Action <Composer <TPayload> > callback)
        {
            composer.ExecuteAsync(async(p, cancellationToken) =>
            {
                TPayload taskPayload = payload(p);

                await ComposerFactory.Compose(taskPayload, callback, composer.CancellationToken);

                return(composer.Payload);
            });

            return(composer);
        }
Example #3
0
        static void Attempt(Composer composer, TimeSpan interval, Action <Composer> callback, CancellationToken repeatCancellationToken)
        {
            composer.ComposeTask(callback);

            composer.ExecuteAsync(token =>
            {
                if (repeatCancellationToken.IsCancellationRequested)
                {
                    return(TaskUtil.Completed());
                }

                return(ComposerFactory.Compose(x =>
                {
                    x.Delay(interval);

                    Attempt(x, interval, callback, repeatCancellationToken);
                }, token));
            }, ExecuteOptions.RunSynchronously);
        }
        /// <summary>
        ///     Creates a new Composer, which can be used to compose a task chain, which can be added to an
        ///     existing composer as a single task. Note that this executes on the task chain, and not immediately.
        /// </summary>
        /// <param name="composer">The existing composer</param>
        /// <param name="callback"></param>
        /// <returns></returns>
        public static Composer ComposeTask(this Composer composer, Action <Composer> callback)
        {
            composer.ExecuteAsync(cancellationToken => ComposerFactory.Compose(callback, composer.CancellationToken));

            return(composer);
        }
        /// <summary>
        ///     Creates a new Composer, which can be used to compose a task chain, which can be added to an
        ///     existing composer as a single task. Note that this executes on the task chain, and not immediately.
        /// </summary>
        /// <typeparam name="T">The payload type</typeparam>
        /// <param name="composer">The existing composer</param>
        /// <param name="callback"></param>
        /// <returns></returns>
        public static Composer <T> ComposeTask <T>(this Composer <T> composer, Action <Composer <T> > callback)
        {
            composer.ExecuteAsync((payload, cancellationToken) => ComposerFactory.Compose(payload, callback, composer.CancellationToken));

            return(composer);
        }
        static async Task <T> ComposeCompensationTask <T>(T payload, Action <Composer> callback, CancellationToken cancellationToken)
        {
            await ComposerFactory.Compose(callback, cancellationToken);

            return(payload);
        }
 /// <summary>
 ///     Creates a new Composer, which can be used to compose a task chain, which can be added to an
 ///     existing composer as a single task. Note that this executes on the task chain, and not immediately.
 /// </summary>
 /// <param name="compensation"></param>
 /// <param name="callback"></param>
 /// <returns></returns>
 public static CompensationResult <T> ComposeTask <T>(this Compensation <T> compensation, Action <Composer <T> > callback)
 {
     return(compensation.Task(ComposerFactory.Compose(compensation.Payload, callback, compensation.CancellationToken)));
 }
 /// <summary>
 ///     Creates a new Composer, which can be used to compose a task chain, which can be added to an
 ///     existing composer as a single task. Note that this executes on the task chain, and not immediately.
 /// </summary>
 /// <param name="compensation"></param>
 /// <param name="callback"></param>
 /// <returns></returns>
 public static CompensationResult ComposeTask(this Compensation compensation, Action <Composer> callback)
 {
     return(compensation.Task(ComposerFactory.Compose(callback, compensation.CancellationToken)));
 }