首页 > 解决方案 > 在 Amazon.S3.AmazonS3Client.UploadPartAsync 上等待未解决

问题描述

我正在等待对 Amazon.S3.AmazonS3Client.UploadPartAsync 的调用,但即使我确定请求已得到满足,等待也永远不会解决。

        private async Task<Amazon.S3.Model.UploadPartResponse> UploadPartString(Amazon.S3.AmazonS3Client client, Amazon.S3.Model.InitiateMultipartUploadResponse initiateMultipartUploadResponse, int partNumber, string content)
        {
            Amazon.S3.Model.UploadPartResponse result;
            var length = content.Length * sizeof(Char);
            this.LambdaContext.Logger.LogLine($"Uploading to {initiateMultipartUploadResponse.BucketName}:{initiateMultipartUploadResponse.Key}[{partNumber}]({length + " bytes"})");

            using (var stream = GenerateStreamFromString(content))
            {
                // THIS AWAIT does not resolve
                result = await client.UploadPartAsync(new Amazon.S3.Model.UploadPartRequest()
                {
                    BucketName = initiateMultipartUploadResponse.BucketName,
                    Key = initiateMultipartUploadResponse.Key,
                    PartNumber = partNumber,
                    UploadId = initiateMultipartUploadResponse.UploadId,
                    InputStream = stream,
                    PartSize = 5 * (long)Math.Pow(2, 20),
                });

                // a breakpoint here never fires
                ETags.Add(new Amazon.S3.Model.PartETag(partNumber, result.ETag));
            }

            return result;

        }

等待之后的断点永远不会被击中。我可以在 fiddler 中看到 200 个 OK 响应的列表,因此请求正在运行:

提琴手

调用代码可以简化为:

var uploadTasks = new List<Task>();

foreach(var batchString in batches)
{
    uploadTasks.Add(UploadPartString(client, multipartUploadInitiateResult, partIndex, batchString));
}

Task.WaitAll(uploadTasks.ToArray());

我的调用代码永远不会超过Task.WaitAll();

我在用着

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

解决方案


推荐阅读