/// <summary>
 /// Handles the message and is the last stage in a handler pipeline.
 /// </summary>
 /// <param name="handlerBuilder">The <see cref="IHandlerBuilder{TMessage}"/>instance.</param>
 /// <param name="handler">The handler.</param>
 public static void Handle <TMessage>(this IHandlerBuilder <TMessage> handlerBuilder, HandlerSync <TMessage> handler)
     where TMessage : class
 {
     handlerBuilder.Handle((message, _) =>
     {
         handler(message);
         return(Task.FromResult(0));
     });
 }
        public static ICreateHandlerBuilder HandleQuery <TInput, TOutput>(
            this IHandlerBuilder <QueryMessage <TInput, TOutput> > handler, Func <TInput, CancellationToken, Task <TOutput> > query)
        {
            return(handler.Handle(async(message, ct) =>
            {
                try
                {
                    var result = await query(message.Input, ct);

                    if (ct.IsCancellationRequested)
                    {
                        message.Source.TrySetCanceled();
                    }
                    else
                    {
                        message.Source.TrySetResult(result);
                    }
                }
                catch (Exception ex)
                {
                    message.Source.TrySetException(ex);
                }
            }));
        }