如何使用Azure.Messaging.ServiceBus.Administration实现分页功能?
Azure.Messaging.ServiceBus.Administration 分页实现指南
新的Azure.Messaging.ServiceBus.Administration SDK采用异步分页模型,返回的AsyncPageable<QueueProperties>类型会自动处理分页逻辑,无需手动维护skip参数。以下是两种实现方式:
一、推荐:SDK原生分页(自动处理)
利用AsPages方法指定每页大小(对应旧代码的top),SDK会自动加载后续页面,无需手动计算偏移量:
private async Task<QueueProperties> FindQueue(ServiceBusAdministrationClient administrationClient, string queueName, int pageSize) { AsyncPageable<QueueProperties> queues = administrationClient.GetQueuesAsync(); // 按页异步枚举队列 await foreach (Page<QueueProperties> page in queues.AsPages(pageSizeHint: pageSize)) { foreach (QueueProperties queue in page.Values) { if (queue.Name.Equals(queueName, StringComparison.OrdinalIgnoreCase)) { return queue; } } // 当前页数量等于pageSize时,SDK会自动加载下一页 } // 未匹配到目标队列 return null; }
调用时直接传入每页大小即可:
var administrationClient = new ServiceBusAdministrationClient(ConnectionString); var foundQueue = await FindQueue(administrationClient, queueName, 100);
二、兼容旧逻辑:手动处理top/skip
如果需要严格模拟旧代码的top和skip参数逻辑,可以手动计算跳过的元素数量:
private async Task<QueueProperties> FindQueue(ServiceBusAdministrationClient administrationClient, string queueName, int top, int skip) { AsyncPageable<QueueProperties> queues = administrationClient.GetQueuesAsync(); int processedTotal = 0; await foreach (Page<QueueProperties> page in queues.AsPages(pageSizeHint: top)) { // 计算当前页需要跳过的元素数 int skipInPage = Math.Max(0, skip - processedTotal); // 从当前页取指定数量的元素 var targetQueues = page.Values.Skip(skipInPage).Take(top); foreach (QueueProperties queue in targetQueues) { if (queue.Name.Equals(queueName, StringComparison.OrdinalIgnoreCase)) { return queue; } } processedTotal += page.Values.Count; // 已处理数量超过skip+top,或当前页不足top,停止遍历 if (processedTotal >= skip + top || page.Values.Count < top) { break; } } // 未匹配到目标队列 return null; }
调用方式和旧代码一致:
var administrationClient = new ServiceBusAdministrationClient(ConnectionString); var foundQueue = await FindQueue(administrationClient, queueName, 100, 0);
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

