/// <summary>
        ///     Invokes a method when all handling at this point is done
        /// </summary>
        /// <typeparam name="TMessageType">
        ///     The message type
        /// </typeparam>
        /// <param name="builder">The action builder</param>
        /// <param name="finallyFunc">The method</param>
        /// <returns>A builder</returns>
        public static IActionDecoratorBuilder <TMessageType> Finally <TMessageType>(this IActionDecoratorBuilder <TMessageType> builder, Func <TMessageType, Task> finallyFunc)
        {
            if (finallyFunc == null)
            {
                throw new ArgumentNullException(nameof(finallyFunc));
            }

            return(builder.Finally((message, token, exception) => finallyFunc(message)));
        }
        /// <summary>
        ///     Invokes a method when all handling at this point is done
        /// </summary>
        /// <typeparam name="TMessageType">
        ///     The message type
        /// </typeparam>
        /// <param name="builder">The action builder</param>
        /// <param name="finallyAction">The method</param>
        /// <returns>A builder</returns>
        public static IActionDecoratorBuilder <TMessageType> Finally <TMessageType>(this IActionDecoratorBuilder <TMessageType> builder, Action <TMessageType> finallyAction)
        {
            if (finallyAction == null)
            {
                throw new ArgumentNullException(nameof(finallyAction));
            }

            return(builder.Finally(
                       (message, token, exception) =>
            {
                finallyAction(message);
                return Task.CompletedTask;
            }));
        }