ListBlobsSegmentedAsync不断返回相同的延续令牌

时间:2019-03-22 08:02:26

标签: azure-storage-blobs

我的应用程序使用ListBlobsSegmentedAsync,并且以下循环永不结束:

    // List blobs existing in container
    HashSet<string> existingBlobNames = new HashSet<string>();
    BlobResultSegment segment;
    do
    {
        segment = await container.ListBlobsSegmentedAsync(null, cancellationToken).ConfigureAwait(false);
        foreach (IListBlobItem blobListItem in segment.Results)
        {
            CloudBlockBlob blob = blobListItem as CloudBlockBlob;
            if (blob != null)
            {
                existingBlobNames.Add(blob.Name);
            }
        }
    }
    while (segment.ContinuationToken != null);

它总是返回完全相同的ContinuationToken并且没有结果。

1 个答案:

答案 0 :(得分:0)

这是我从另一个服务中移植了此逻辑的方法,该服务已经成功运行了多年。原来,该服务始终存在相同的错误。但是,由于一个容器中最多可能有10个斑点,因此它永远不会被击中。

此代码实际上需要传递一个延续令牌=)这是更正的版本。

        BlobContinuationToken continuationToken = null;
        do
        {
            BlobResultSegment segment = await container.ListBlobsSegmentedAsync(continuationToken, cancellationToken).ConfigureAwait(false);
            foreach (IListBlobItem blobListItem in segment.Results)
            {
                CloudBlockBlob blob = blobListItem as CloudBlockBlob;
                if (blob != null)
                {
                    existingBlobNames.Add(blob.Name);
                }
            }

            continuationToken = segment.ContinuationToken;
        }
        while (continuationToken != null);