我正在使用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}}?