Пример #1
0
        /// <summary>
        /// 绑定此队列到消息路由器
        /// </summary>
        /// <param name="key"></param>
        /// <param name="messageRouter"></param>
        /// <param name="cancellation"></param>
        /// <returns>释放此对象以解除绑定</returns>
        /// <exception cref="ArgumentNullException"><paramref name="messageRouter"/>为空 或 <paramref name="key"/>为空</exception>
        /// <remarks>每个队列对象可以同时绑定到多个消息路由器</remarks>
        public async Task <IAsyncDisposable> BindAsync(
            string key,
            IMessageRouter <TMessage> messageRouter,
            CancellationToken cancellation = default)
        {
            if (messageRouter == null)
            {
                throw new ArgumentNullException(nameof(messageRouter));
            }

            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            return(await messageRouter.RegisterCallbackAsync(
                       new Registration <TMessage>(key, EnqueueMessageWithCapacity),
                       cancellation));
        }