C# 为什么ListBlobsSegmentedAsync只在第二页返回结果? 问题

C# 为什么ListBlobsSegmentedAsync只在第二页返回结果? 问题,c#,azure,azure-storage-blobs,C#,Azure,Azure Storage Blobs,我正试图抓取一页多达5000个blob,没有前缀。该容器中大约有26000个水滴。我在第一页上始终没有得到任何结果,但我注意到返回的BlobContinuationToken不是空的,因此我可以再次翻页并在第二页上获得结果为什么第一页没有结果,而第二页却有结果? 我希望能够做到这一点,并且只抓取一页: var response = await container.ListBlobsSegmentedAsync(null).ConfigureAwait(false); 但这不会返回任何结果,因此

我正试图抓取一页多达5000个blob,没有前缀。该容器中大约有26000个水滴。我在第一页上始终没有得到任何结果,但我注意到返回的
BlobContinuationToken
不是空的,因此我可以再次翻页并在第二页上获得结果为什么第一页没有结果,而第二页却有结果?

我希望能够做到这一点,并且只抓取一页:

var response = await container.ListBlobsSegmentedAsync(null).ConfigureAwait(false);
但这不会返回任何结果,因此,我必须再次调用它,传入continuationToken,在这一点上我会得到结果

我所考虑的
  • 只有当容器变小时(它曾经有超过100000个blob)才会发生这种情况
  • 我经常删除这个容器,但我找不到任何东西表明这会影响可用性
  • 我尝试为
    useFlatBlobListing
    传递
    true
    ,但它没有改变任何东西,但我并不真正理解该选项(据我所知,我的容器的内容是平面的)
  • 我以前使用过
    ListBlobsSegmentedAsync
    ,从未注意到这个问题(但容器更大)
  • 我使用的是4.3.0版的存储SDK,它已经过时了。我尝试过更新,但没有解决问题,所以我回去了
  • 我已尝试传入null continuationToken,并且只传入了
    new BlobContinuationToken()
    。我不确定一个是否更好
  • 我可以通过VisualStudio中的云资源管理器验证容器中仍然有26000个blob,但结果第一页的代码中没有。我想知道,云浏览器有什么不同之处
编辑更多疑难解答
在一个更大的容器上,过了一段时间之后,为了得到结果,它开始进行两次以上的页面抓取。每个页面获取(包括空页面)大约需要5秒钟,直到最终返回结果。我看到它在峰值时最多需要12页的抓取,在一个包含300000多个blob的容器上返回结果总共需要60多秒。这是在容器上执行大量删除后不久发生的。

您偶尔会获得空页面或小于最大结果的页面以及延续标记,这一点也不意外。如果返回的延续令牌将您带到下一页,为什么会出现问题?如果您不想处理延续标记,ListBlob(不是分段版本)将提供一个迭代器,该迭代器将惰性地获取更多Blob,并为您跟踪延续标记


至于根本原因,有很多原因会发生这种情况。我的猜测是,在你的情况下,频繁的删除,但这只是一个猜测。返回的结果少于max结果的数量,并且由于多种原因会发生延续,但我怀疑这里有几个原因:1。我们点击了服务器端超时,因此返回到目前为止的值2。命中分区的边缘,当blob列表较大且可能跨越多台计算机时,这种情况更为频繁。如果你经常删除博客并且有很多东西,可能需要一些时间来实际收集那些垃圾,所以我们会花我们所有的时间来扫描那些我们不返回的东西。

我猜这不是问题,但我会认为这是意想不到的行为(这对我来说是错误的)。如果我的容器中有26000个blob,我告诉它获取第一页,为什么第一页是空的,第二页是满的?原因有很多。我的猜测是,在你的情况下,频繁的删除,但这只是一个猜测。返回的结果少于max结果的数量,并且由于多种原因会发生延续,但我怀疑这里有几个原因:1。我们点击了服务器端超时,因此返回到目前为止的值2。命中分区的边缘,当blob列表较大且可能跨越多台计算机时,这种情况更为频繁。如果你经常删除blob并且有很多blob,那么垃圾收集可能需要一些时间,所以我们会花所有的时间扫描我们没有返回的内容。这很有意义,谢谢你提供的信息。如果你想把你最后的回复作为回答,我很乐意接受。我没有想到服务器端超时,但这是有意义的,因为每个页面都花费了将近5秒的时间。我不完全理解默认超时场景,但它似乎是合理的。垃圾收集问题似乎也很合理……这是我最后的想法。不确定是否有办法让客户更清楚地了解这一点。