首页 > 解决方案 > await PutObjectAsync(PutObjectAsync, CancellationToken) 是否真的在等待 AWS SDK for .NET 中的上传完成?

问题描述

我正在使用该AmazonS3Client.PutObjectAsync(PutObjectAsync, CancellationToken)方法将我的文件上传到 s3 存储。所以我服务中的代码看起来像

await _client.PutObjectAsync(putObject, cancellationToken).ConfigureAwait(false);

我必须等到上传完成,因为下一个服务应该下载这些文件。

现在,我面临问题 -PutObjectAsync已执行,但 s3 不包含我需要的文件,它仅在我的程序完成几秒钟后出现。

我检查了PutObjectResponse课程,但没有找到任何可以解释文件是否已完全上传的内容。我也没有找到有关PutObjectAsync方法行为的信息。

所以问题是如果PutObjectAsync结合ConfigurateAwait(false)真的等待上传完成还是我错过了什么?

先感谢您。任何指导将不胜感激。

标签: c#amazon-s3.net-coreaws-sdk-net

解决方案


是的,await PutObjectAsync将(异步)等到上传完成。

现在,我遇到了问题 - PutObjectAsync 已执行,但 s3 不包含我需要的文件,它仅在我的程序完成几秒钟后出现。

您所看到的是最终的一致性,这在云服务中几乎无处不在。文件已上传,但可能需要一些时间才能使用。解决此问题的最基本方法是轮询直到文件“出现”。我不熟悉 S3 的细节,但一些云服务提供“读取我自己的写入”或某种标志,导致Put延迟直到可以读取文件;这简化了您的代码,但实际上只是将轮询移至亚马逊的服务器。


推荐阅读