/// <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)); }