コード例 #1
0
        public int DrainTo <TE>(ICollection <TE> c, int maxElements) where TE : T
        {
            var request = QueueDrainToMaxSizeCodec.EncodeRequest(GetName(), maxElements);
            var result  = Invoke(request, m => QueueDrainToMaxSizeCodec.DecodeResponse(m).response);

            foreach (var data in result)
            {
                var e = ToObject <T>(data);
                c.Add((TE)e);
            }
            return(result.Count);
        }
コード例 #2
0
        // TODO: Queue.Drain has issues
        // it may throw if the object is T but not TItem, need to review all these weird overloads
        // also deserializing immediately instead of returning a lazy thing?
        /// <inheritdoc />
        public async Task <int> DrainToAsync <TItem>(ICollection <TItem> items, int count = int.MaxValue) where TItem : T
        {
            var requestMessage  = QueueDrainToMaxSizeCodec.EncodeRequest(Name, count);
            var responseMessage = await Cluster.Messaging.SendToPartitionOwnerAsync(requestMessage, PartitionId).CAF();

            var response = QueueDrainToMaxSizeCodec.DecodeResponse(responseMessage).Response;

            foreach (var itemData in response)
            {
                items.Add((TItem)ToObject <T>(itemData));
            }
            return(response.Count);
        }
コード例 #3
0
        /// <inheritdoc />
        public async Task <int> DrainToAsync(ICollection <T> items, int maxElements)
        {
            var requestMessage  = QueueDrainToMaxSizeCodec.EncodeRequest(Name, maxElements);
            var responseMessage = await Cluster.Messaging.SendToPartitionOwnerAsync(requestMessage, PartitionId).CfAwait();

            var response = QueueDrainToMaxSizeCodec.DecodeResponse(responseMessage).Response;

            foreach (var itemData in response)
            {
                items.Add(ToObject <T>(itemData));
            }
            return(response.Count);
        }