我正在查看TransferManager的AWS开发工具包文档中提供的用法示例,尤其是以下代码:
TransferManager tx = new TransferManager(
credentialProviderChain.getCredentials());
Upload myUpload = tx.upload(myBucket, myFile.getName(), myFile);
// Transfers also allow you to set a <code>ProgressListener</code> to receive
// asynchronous notifications about your transfer's progress.
myUpload.addProgressListener(myProgressListener);
我想知道我们是否没有比赛条件的情况。 AFAIU TransferManager
是异步工作的,它甚至可以在创建Upload
对象之后甚至在添加侦听器之前立即开始上传文件,因此,如果我们使用文档中提供的代码段,似乎我们可能不会收到所有通知。我已经简要地研究了addProgressListener
,但我看不到在附加新的侦听器后会重播过去的事件。我错了吗?我想念什么吗?
答案 0 :(得分:1)
如果您需要获取所有事件,我想这可以通过使用另一种ProgressListener
作为参数的upload
方法来实现。当然,使用此方法将需要将您的存储桶名称,密钥和文件封装到PutObjectRequest
的实例中。