public async Task <IContinuation> Handle(Envelope envelope)
        {
            try
            {
                var chain = _invoker.FindChain(envelope);
                if (chain == null)
                {
                    return(null);
                }

                return(await ExecuteChain(envelope, chain).ConfigureAwait(false));
            }
            catch (EnvelopeDeserializationException ex)
            {
                return(new DeserializationFailureContinuation(ex));
            }
        }
        public IContinuation Handle(Envelope envelope)
        {
            try
            {
                var chain = _invoker.FindChain(envelope);
                if (chain == null)
                {
                    return(null);
                }

                return(chain.IsAsync
                    ? new AsyncChainExecutionContinuation(() => ExecuteChain(envelope, chain))
                    : ExecuteChain(envelope, chain));
            }
            catch (EnvelopeDeserializationException ex)
            {
                return(new DeserializationFailureContinuation(ex));
            }
        }