Azure Blob存储与下载文件有关的问题

时间:2020-06-16 15:38:01

标签: c# azure azure-storage-blobs

我正在研究允许用户下载Azure Blob存储项目的功能。

我正在尝试使用以下方法获取blob列表:

 var list = await container.GetBlobsAsync(BlobTraits.All, BlobStates.All, string.Empty).ConfigureAwait(false);

这是我的错误:

错误CS1061'ConfiguredCancelableAsyncEnumerable'不包含'GetAwaiter'的定义,并且找不到可访问的扩展方法'GetAwaiter'接受类型为'ConfiguredCancelableAsyncEnumerable'的第一个参数(您是否缺少using指令或程序集参考?)

C#7.3是否可以使用异步功能?还是要使用异步调用获取容器中的所有Blob,我都需要升级到8.0 C#?

如果我将代码更改为此:

            await foreach (BlobItem page in container.GetBlobsAsync(BlobTraits.None, BlobStates.None, string.Empty))
            {
                yield return container.GetBlobClient(page.Name);
            }

然后我出现此错误:

错误CS8370在C#7.3中不提供功能“异步流”。请使用语言版本8.0或更高版本。

我知道GetBlobsAsync()返回AsyncPageable<>,并且我假设它仅在C#8.0中可用吗?

1 个答案:

答案 0 :(得分:3)

这些是我能想到的两个选项:

  1. 将您的langVersion更新为8,表示您不想这么做
  2. 使用枚举器,例如

    var blobs = blobContainerClient.GetBlobsAsync()
    List<BlobItem> blobList = new List<BlobItem>();
    IAsyncEnumerator<BlobItem> enumerator = blobs.GetAsyncEnumerator();
    try
    {
        while (await enumerator.MoveNextAsync())
        {
            blobList.Add(enumerator.Current);
        }
    }
    finally
    {
        await enumerator.DisposeAsync();
    }