/// <summary> /// Clears all of the items from a queue partition. /// </summary> private async Task ClearQueueAsync() { HttpQueueClient <Item> qc = new HttpQueueClient <Item>(new Uri(serviceUri), c_ListenerName); Assert.IsNotNull(qc); long queueCount = await qc.CountAsync().ConfigureAwait(false); long itemCount = await qc.CountAsync(QueueType.ItemQueue); // Visit each partition looking for items. for (long partition = 0; partition < qc.ServicePartitionCount; partition++) { // Get the items in this partition. IEnumerable <QueueItem <Item> > results = await qc.GetItemsAsync(partition).ConfigureAwait(false); foreach (QueueItem <Item> qi in results) { var deleteResults = await qc.DeleteItemAsync(qi.Key, CancellationToken.None).ConfigureAwait(false); } } int attempt = qc.ServicePartitionCount; // Get the count, there may be items hanging out in the queues, which won't be removed until a dequeue operation for that partition is attempted // and the corresponding item is not found in the list of items. while ((await qc.CountAsync().ConfigureAwait(false) > 0) && (attempt-- > 0)) { IEnumerable <QueueItem <Item> > results = await qc.DequeueAsync().ConfigureAwait(false); } }
public async Task DeleteItems_Test() { HttpQueueClient <Item> qc = new HttpQueueClient <Item>(new Uri(serviceUri), c_ListenerName); Assert.IsNotNull(qc); // Check that the count is zero. long beginQueueCount = await qc.CountAsync().ConfigureAwait(false); long beginItemCount = await qc.CountAsync(QueueType.ItemQueue).ConfigureAwait(false); // Add three items to the queue. Item[] items = new Item[] { i1, i2, i3 }; var enqueueResult = await qc.EnqueueAsync(items).ConfigureAwait(false); Assert.IsNotNull(enqueueResult); foreach (QueueItem <Item> item in enqueueResult) { var deletedItem = await qc.DeleteItemAsync(item.Key, CancellationToken.None).ConfigureAwait(false); Assert.AreEqual(item.Key, deletedItem.Key); Assert.AreEqual(item.DequeueCount, deletedItem.DequeueCount); Assert.AreEqual(item.EnqueueTime, deletedItem.EnqueueTime); Assert.AreEqual(item.ExpirationTime, deletedItem.ExpirationTime); Assert.IsTrue(item.Item.Equals(deletedItem.Item)); Assert.AreEqual(item.LeasedUntil, deletedItem.LeasedUntil); Assert.AreEqual(item.LeaseDuration, deletedItem.LeaseDuration); Assert.AreEqual(item.Queue, deletedItem.Queue); } Assert.AreEqual(beginQueueCount + items.Count(), await qc.CountAsync().ConfigureAwait(false)); Assert.AreEqual(beginItemCount, await qc.CountAsync(QueueType.ItemQueue).ConfigureAwait(false)); }
/// <summary> /// Empties a partition of all items. /// </summary> private static async Task EmptyAsync() { int partition = 0, temp; Console.WriteLine($"Enter the partition number to retrieve items from. Current value is {partition}: "); partition = int.TryParse(Console.ReadLine(), out temp) ? temp : partition; HttpQueueClient <Item> qc = new HttpQueueClient <Item>(_serviceUri, c_ListenerName); int count = 0; do { var items = await qc.GetItemsAsync(_itemPartition, _itemCount, _itemSkip); foreach (var item in items) { count++; var i = await qc.DeleteItemAsync(item.Key, CancellationToken.None); } } while (count > 0); Console.WriteLine("Items removed from partition."); }