ListBlobsSegmentedAsync продолжает возвращать один и тот же токен продолжения - PullRequest
0 голосов
/ 22 марта 2019

Мое приложение использует 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 голосов
/ 22 марта 2019

Это я перенес эту логику с другого сервиса, который успешно работал годами.Оказалось, что у сервиса всегда была одна и та же ошибка.Но поскольку в контейнере могло быть не более 10 BLOB-объектов, он никогда не попадал в него.

Этот код должен фактически передавать маркер продолжения =) Вот исправленная версия.

        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);
...