【问题标题】:Get all Blobs From Azure Storage using .NET Core 2.2使用 .NET Core 2.2 从 Azure 存储中获取所有 Blob
【发布时间】:2020-12-18 12:01:17
【问题描述】:

关于从 Azure 存储(或者更准确地说是从容器中)获取 blob 列表的快速问题

由于我使用的是 .NET Core 2.2,并且 C# 7.3 版本中不允许使用异步流:

 await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
    {
        Console.WriteLine("\t" + blobItem.Name);
    }

所以我尝试了类似的方法,但没有任何运气(在黑暗中刺伤)

List<BlobItem> items = new List<BlobItem>();
Task.Factory.StartNew(async () => items.Add(await containerClient.GetBlobsAsync()));

所以我想知道在 C# v7.3 中等待 foreach 语法的替代方法是什么

谢谢

【问题讨论】:

    标签: c# .net azure asp.net-core


    【解决方案1】:

    GetBlobsAsync() 返回的AsyncPageable&lt;T&gt; 公开了一个IAsyncEnumerator&lt;T&gt;,您可以使用它通过一个简单的while 循环进行迭代:

    Azure.AsyncPageable<Azure.Storage.Blobs.Models.BlobItem> blobs = containerClient.GetBlobsAsync();
    IAsyncEnumerator<Azure.Storage.Blobs.Models.BlobItem> enumerator = blobs.GetAsyncEnumerator();
    try
    {
        while (await enumerator.MoveNextAsync())
        {
            Azure.Storage.Blobs.Models.BlobItem blob = enumerator.Current;
            // use blob
        }
    }
    finally
    {
        await enumerator.DisposeAsync();
    }
    

    【讨论】:

      【解决方案2】:

      有一种比 while 循环选项更紧凑的语法可以做到这一点,

      AsyncPageable<SecretProperties> allSecretProperties = client.GetPropertiesOfSecretsAsync();
      
      await foreach (SecretProperties secretProperties in allSecretProperties)
      {
          Console.WriteLine(secretProperties.Name);
      }
      

      示例取自azure sdk docks

      【讨论】:

      • 抱歉,问题是如何使用 C# 7.3 执行此操作。使用 C# 7.3 异步流不可用,因此您提出的代码 await foreach 不适用于所提出的问题。
      猜你喜欢
      • 2018-10-14
      • 1970-01-01
      • 2020-07-15
      • 2021-07-24
      • 2015-11-04
      • 2014-07-20
      • 2020-09-05
      • 1970-01-01
      • 2018-05-26
      相关资源
      最近更新 更多