Azure 无法使用BlobContainerAsyncClient列出Blob

Azure 无法使用BlobContainerAsyncClient列出Blob,azure,azure-storage,azure-storage-blobs,Azure,Azure Storage,Azure Storage Blobs,我想使用azure java sdk版本12.0.6列出容器中的blob。为了获得良好的性能,我对类BlobContainerAsyncClient使用了异步方法。但是我不能在类中列出blob,并且我没有得到任何错误 我的代码 ListBlobsOptions options = new ListBlobsOptions() .setDetails(new BlobListDetails() .setRetrieveDeletedBlobs

我想使用azure java sdk版本12.0.6列出容器中的blob。为了获得良好的性能,我对类
BlobContainerAsyncClient
使用了异步方法。但是我不能在类中列出blob,并且我没有得到任何错误

我的代码

ListBlobsOptions options = new ListBlobsOptions()
            .setDetails(new BlobListDetails()
                .setRetrieveDeletedBlobs(true)
                .setRetrieveSnapshots(true));

        client.listBlobs(options).subscribe(blob ->
            System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
                blob.getName(),
                blob.isPrefix(),
                blob.isDeleted(),
                blob.getSnapshot()));

你应该尝试两件事:

  • 使用同步API并确保获得预期的响应。如果您得到了预期的结果,那么就排除了与身份验证、容器名称等相关的问题
  • 因为上面的代码是异步的,所以需要确保在从服务接收响应之前应用程序没有退出。如果您可以更新上面的代码列表以更全面地显示您正在做什么,我们可以排除这种情况。为了提高可信度,您还可以选择执行以下两种操作之一,以暂时提高异步代码正确性的可信度:
  • 在订阅呼叫后临时添加
    线程睡眠(5000)
    呼叫
  • .subscribe()
    调用替换为
    .block()
    调用,实质上将请求转换回同步调用

  • 你应该尝试两件事:

  • 使用同步API并确保获得预期的响应。如果您得到了预期的结果,那么就排除了与身份验证、容器名称等相关的问题
  • 因为上面的代码是异步的,所以需要确保在从服务接收响应之前应用程序没有退出。如果您可以更新上面的代码列表以更全面地显示您正在做什么,我们可以排除这种情况。为了提高可信度,您还可以选择执行以下两种操作之一,以暂时提高异步代码正确性的可信度:
  • 在订阅呼叫后临时添加
    线程睡眠(5000)
    呼叫
  • .subscribe()
    调用替换为
    .block()
    调用,实质上将请求转换回同步调用

  • 关于该问题,请参考以下代码

    ListBlobsOptions options = new ListBlobsOptions()
                .setDetails(new BlobListDetails()
                    .setRetrieveDeletedBlobs(true)
                    .setRetrieveSnapshots(true));
    lient.listBlobs(options).doOnNext(blob ->
                System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
                    blob.getName(),
                    blob.isPrefix(),
                    blob.isDeleted(),
                    blob.getSnapshot()))
                 .blockLast();
    


    此外,不能同时调用
    subscribe()
    block()
    。调用
    subscribe()
    时,您将返回一个
    一次性
    ,它允许您取消异步操作,但不能阻止此对象。如果要确保有问题的方法阻塞,只需对操作调用
    block()
    (具有
    block()
    方法的类型是
    Mono
    或可能是
    Flux
    )。

    关于此问题,请参考以下代码

    ListBlobsOptions options = new ListBlobsOptions()
                .setDetails(new BlobListDetails()
                    .setRetrieveDeletedBlobs(true)
                    .setRetrieveSnapshots(true));
    lient.listBlobs(options).doOnNext(blob ->
                System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
                    blob.getName(),
                    blob.isPrefix(),
                    blob.isDeleted(),
                    blob.getSnapshot()))
                 .blockLast();
    


    此外,不能同时调用
    subscribe()
    block()
    。调用
    subscribe()
    时,您将返回一个
    一次性
    ,它允许您取消异步操作,但不能阻止此对象。如果要确保有问题的方法是块,只需对操作调用
    block()
    (具有
    block()
    方法的类型是
    Mono
    或可能是
    Flux
    ).

    我不能在
    subscribe
    方法之后添加
    block
    方法。我不能在
    subscribe
    方法之后添加
    block
    方法。