c# - 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)
真的等待上传完成还是我错过了什么?
先感谢您。任何指导将不胜感激。
解决方案
是的,await PutObjectAsync
将(异步)等到上传完成。
现在,我遇到了问题 - PutObjectAsync 已执行,但 s3 不包含我需要的文件,它仅在我的程序完成几秒钟后出现。
您所看到的是最终的一致性,这在云服务中几乎无处不在。文件已上传,但可能需要一些时间才能使用。解决此问题的最基本方法是轮询直到文件“出现”。我不熟悉 S3 的细节,但一些云服务提供“读取我自己的写入”或某种标志,导致Put
延迟直到可以读取文件;这简化了您的代码,但实际上只是将轮询移至亚马逊的服务器。
推荐阅读
- java - 使用本地主机在 Windows Server 2012 R2 上进行 Selenium 自动化测试
- typescript - 带有泛型的打字稿方法重载
- r - 为什么正常样本的直方图在模式附近比在尾部附近更粗糙?
- php - Laravel 重定向和验证错误
- javascript - 等待多个异步函数的承诺链等价物是什么?
- python - Python + Requests + Eve:发送数据到 post 失败,错误代码为 422
- javascript - 为什么 Protobuf JavaScript 编译器为集合添加“List”、“Map”等后缀?
- python - 请求有效载荷 - 上传图片
- python - 每次迭代更新字典,而不是整体更新
- django - 如何覆盖 GeoDjango GeoJSON Seriliazer 以包含模型属性