コード例 #1
0
        public static async Task <Ackable <List <Ackable <TMessage> > > > GetManyAsync <TMessage>(this IBusClient busClient, int batchSize, Action <IGetConfigurationBuilder> config = null, CancellationToken token = default(CancellationToken))
        {
            var channel = await busClient.CreateChannelAsync(token : token);

            var result = new List <Ackable <TMessage> >();

            while (result.Count < batchSize)
            {
                var ackableMessage = await busClient.GetAsync <TMessage>(config, c => c.Properties.TryAdd(PipeKey.Channel, channel), token);

                if (ackableMessage.Content == null)
                {
                    break;
                }
                result.Add(ackableMessage);
            }

            return(new Ackable <List <Ackable <TMessage> > >(
                       result,
                       result.FirstOrDefault()?.Channel,
                       list => list.Where(a => !a.Acknowledged).SelectMany(a => a.DeliveryTags).ToArray()
                       ));
        }