下载文件时的 Azure Blob 存储问题

pg2*_*727 6 c# azure azure-blob-storage

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

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

 var list = await container.GetBlobsAsync(BlobTraits.All, BlobStates.All, string.Empty).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

这是我遇到的错误:

错误 CS1061“ConfiguredCancelableAsyncEnumerable”不包含“GetAwaiter”的定义,并且找不到接受“ConfiguredCancelableAsyncEnumerable”类型的第一个参数的可访问扩展方法“GetAwaiter”(您是否缺少 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);
            }
Run Code Online (Sandbox Code Playgroud)

然后我有这个错误:

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

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

Sam*_*ude 10

这是我能想到的两个选择:

  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();
    }
    
    Run Code Online (Sandbox Code Playgroud)