/// <summary>
        ///     Sets the key semaphore
        /// </summary>
        /// <typeparam name="TKeyType">The key types</typeparam>
        /// <param name="keySemaphore">A key semaphore</param>
        /// <returns>A SemaphoreWithKeyDecoratorBuilder</returns>
        public SemaphoreWithKeyDecoratorBuilder <TMessageType, TKeyType> KeySemaphore <TKeyType>(KeySemaphore <TKeyType> keySemaphore)
        {
            var newBuilder = new SemaphoreWithKeyDecoratorBuilder <TMessageType, TKeyType>().MaxNumberOfConcurrentMessages(this.maxNumberOfConcurrentMessages)
                             .KeySemaphore(keySemaphore);

            this.buildFunc = newBuilder.Build;
            return(newBuilder);
        }
        /// <summary>
        ///     Sets an equality comparer
        /// </summary>
        /// <typeparam name="TKeyType">The key types</typeparam>
        /// <param name="equalityComparer">
        ///     The equality Comparer.
        /// </param>
        /// <returns>A SemaphoreWithKeyDecoratorBuilder</returns>
        public SemaphoreWithKeyDecoratorBuilder <TMessageType, TKeyType> EqualityComparer <TKeyType>(IEqualityComparer <TKeyType> equalityComparer)
        {
            var newBuilder = new SemaphoreWithKeyDecoratorBuilder <TMessageType, TKeyType>().MaxNumberOfConcurrentMessages(this.maxNumberOfConcurrentMessages)
                             .EqualityComparer(equalityComparer);

            this.buildFunc = newBuilder.Build;
            return(newBuilder);
        }