C#使用生成器列出Blob目录内容

时间:2018-08-30 17:22:26

标签: c# asynchronous azure-storage-blobs yield-return

我正在使用azure blob存储,并想制定一种列出目录中所有blob的方法。我可以像这样列出目录的所有元素:

CloudBlobDirectory dir;
BlobContinuationToken token = null;
List<IListBlobItem> elements = new List<IListBlobItem>();
do
{
    BlobResultSegment results = await dir.ListBlobsSegmentedAsync(token);
    token = results.ContinuationToken;
    elements.AddRange(results.Results)
} while (token != null);

但是如果尝试使用生成器列出所有内容,就会遇到问题。如果我想使用yield return,则返回类型必须为IEnumerable<Task<IListBlobItem>>,然后方法不能为async,并且我不能使用await。

public IEnumerable<Task<IListBlobItem>> ListDirectoryContents(CloudBlobDirectory dir)
{
    BlobContinuationToken token = null;
    List<IListBlobItem> elements = new List<IListBlobItem>();
    do
    {
        Task<BlobResultSegment> results = dir.ListBlobsSegmentedAsync(token);
        ???
    } while (token != null);
}

在非异步方法中,如何同时更新连续令牌和每个yield return的{​​{1}}?

0 个答案:

没有答案