示例#1
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonGlacierConfig config = new AmazonGlacierConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonGlacierClient client = new AmazonGlacierClient(creds, config);

            ListMultipartUploadsResponse resp = new ListMultipartUploadsResponse();

            do
            {
                ListMultipartUploadsRequest req = new ListMultipartUploadsRequest
                {
                    Limit = maxItems
                };

                resp = client.ListMultipartUploads(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.UploadsList)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.Marker));
        }
        public async Task ListMultipartUploads()
        {
            await CreateTempBucketAsync(async bucket =>
            {
                string objName = nameof(ListMultipartUploads) + "%";

                CreateMultipartUploadResponse createResp = await MultipartClient.CreateMultipartUploadAsync(bucket, objName).ConfigureAwait(false);

                byte[] file = new byte[5 * 1024];

                using (MemoryStream ms = new MemoryStream(file))
                    await MultipartClient.UploadPartAsync(bucket, objName, 1, createResp.UploadId, ms).ConfigureAwait(false);

                ListMultipartUploadsResponse listResp = await MultipartClient.ListMultipartUploadsAsync(bucket, req => req.EncodingType = EncodingType.Url).ConfigureAwait(false);

                Assert.Equal(bucket, listResp.Bucket);
                Assert.Equal(WebUtility.UrlEncode(objName), listResp.NextKeyMarker);
                Assert.NotEmpty(listResp.NextUploadIdMarker);
                Assert.Equal(1000, listResp.MaxUploads);
                Assert.False(listResp.IsTruncated);

                S3Upload upload = Assert.Single(listResp.Uploads);

                Assert.Equal(listResp.NextKeyMarker, upload.ObjectKey);
                Assert.Equal(listResp.NextUploadIdMarker, upload.UploadId);
                Assert.Equal(StorageClass.Standard, upload.StorageClass);
                Assert.Equal(DateTime.UtcNow, upload.Initiated.DateTime, TimeSpan.FromSeconds(5));
            }).ConfigureAwait(false);
        }
示例#3
0
        public async Task ListIncompleteParts()
        {
            await CreateTempBucketAsync(async bucket =>
            {
                InitiateMultipartUploadResponse initResp = await ObjectClient.InitiateMultipartUploadAsync(bucket, nameof(ListIncompleteParts)).ConfigureAwait(false);

                byte[] file = new byte[5 * 1024];

                using (MemoryStream ms = new MemoryStream(file))
                    await ObjectClient.UploadPartAsync(bucket, nameof(ListIncompleteParts), 1, initResp.UploadId, ms).ConfigureAwait(false);

                ListMultipartUploadsResponse listResp = await BucketClient.ListMultipartUploadsAsync(bucket).ConfigureAwait(false);

                Assert.Equal(bucket, listResp.Bucket);
                Assert.Equal("ListIncompleteParts", listResp.NextKeyMarker);
                Assert.NotEmpty(listResp.NextUploadIdMarker);
                Assert.Equal(1000, listResp.MaxUploads);
                Assert.False(listResp.IsTruncated);

                S3Upload upload = Assert.Single(listResp.Uploads);

                Assert.Equal(listResp.NextKeyMarker, upload.Name);
                Assert.Equal(listResp.NextUploadIdMarker, upload.UploadId);
                Assert.Equal(TestConstants.TestUsername, upload.Initiator.Name);
                Assert.Equal(StorageClass.Standard, upload.StorageClass);
                Assert.Equal(DateTime.UtcNow, upload.Initiated.DateTime, TimeSpan.FromSeconds(5));
            }).ConfigureAwait(false);
        }
示例#4
0
        public override void Execute()
        {
            if (string.IsNullOrEmpty(this._bucketName))
            {
                throw new ArgumentNullException("bucketName", "The bucketName Specified is null or empty!");
            }

            ListMultipartUploadsResponse listResponse = new ListMultipartUploadsResponse();

            do
            {
                ListMultipartUploadsRequest listRequest = new ListMultipartUploadsRequest()
                                                          .WithBucketName(this._bucketName)
                                                          .WithKeyMarker(listResponse.KeyMarker)
                                                          .WithUploadIdMarker(listResponse.NextUploadIdMarker)
                                                          .WithBeforeRequestHandler(RequestEventHandler) as ListMultipartUploadsRequest;

                listResponse = this._s3Client.ListMultipartUploads(listRequest);
                foreach (MultipartUpload upload in listResponse.MultipartUploads)
                {
                    if (upload.Initiated < this._initiatedDate)
                    {
                        this._s3Client.AbortMultipartUpload(new AbortMultipartUploadRequest()
                                                            .WithBucketName(this._bucketName)
                                                            .WithKey(upload.Key)
                                                            .WithUploadId(upload.UploadId)
                                                            .WithBeforeRequestHandler(RequestEventHandler) as AbortMultipartUploadRequest);
                    }
                }
            }while (listResponse.IsTruncated);
        }
示例#5
0
        static void ListMultipartUploads()
        {
            try
            {
                ListMultipartUploadsRequest request = new ListMultipartUploadsRequest()
                {
                    BucketName     = bucketName,
                    Delimiter      = "delimiter",
                    Prefix         = "prefix",
                    KeyMarker      = "keymarker",
                    MaxUploads     = 10,
                    UploadIdMarker = "uploadidmarker"
                };
                ListMultipartUploadsResponse response = client.ListMultipartUploads(request);
                Console.WriteLine("List multipart uploads response: {0}", response.StatusCode);

                foreach (MultipartUpload multipart in response.MultipartUploads)
                {
                    Console.WriteLine("MultipartUpload object key: {0}", multipart.ObjectKey);
                    Console.WriteLine("MultipartUpload upload id: {0}", multipart.UploadId);
                }
            }
            catch (ObsException ex)
            {
                Console.WriteLine("Exception errorcode: {0}, when list multipart uploads.", ex.ErrorCode);
                Console.WriteLine("Exception errormessage: {0}", ex.ErrorMessage);
            }
        }
示例#6
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            ListMultipartUploadsResponse response = new ListMultipartUploadsResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.TestExpression("Marker", targetDepth))
                {
                    var unmarshaller = StringUnmarshaller.Instance;
                    response.Marker = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("UploadsList", targetDepth))
                {
                    var unmarshaller = new ListUnmarshaller <UploadListElement, UploadListElementUnmarshaller>(UploadListElementUnmarshaller.Instance);
                    response.UploadsList = unmarshaller.Unmarshall(context);
                    continue;
                }
            }

            return(response);
        }
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            ListMultipartUploadsResponse response = new ListMultipartUploadsResponse();

            context.Read();

            UnmarshallResult(context, response);
            return(response);
        }
示例#8
0
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            ListMultipartUploadsResponse response = new ListMultipartUploadsResponse();

            context.Read();

            response.ListMultipartUploadsResult = ListMultipartUploadsResultUnmarshaller.GetInstance().Unmarshall(context);

            return(response);
        }
示例#9
0
        private ListMultipartUploadsRequest ConstructListMultipartUploadsRequest(ListMultipartUploadsResponse listResponse)
        {
            ListMultipartUploadsRequest listRequest = new ListMultipartUploadsRequest()
            {
                BucketName     = this._bucketName,
                KeyMarker      = listResponse.KeyMarker,
                UploadIdMarker = listResponse.NextUploadIdMarker,
            };

            listRequest.BeforeRequestEvent += this.RequestEventHandler;
            return(listRequest);
        }
示例#10
0
        private ListMultipartUploadsRequest ConstructListMultipartUploadsRequest(ListMultipartUploadsResponse listResponse)
        {
            ListMultipartUploadsRequest listRequest = new ListMultipartUploadsRequest()
            {
                BucketName     = this._bucketName,
                KeyMarker      = listResponse.KeyMarker,
                UploadIdMarker = listResponse.NextUploadIdMarker,
            };

            ((Amazon.Runtime.Internal.IAmazonWebServiceRequest)listRequest).AddBeforeRequestHandler(this.RequestEventHandler);
            return(listRequest);
        }
示例#11
0
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            ListMultipartUploadsResponse listMultipartUploadsResponse = new ListMultipartUploadsResponse();

            while (context.Read())
            {
                if (context.get_IsStartElement())
                {
                    UnmarshallResult(context, listMultipartUploadsResponse);
                }
            }
            return(listMultipartUploadsResponse);
        }
        private static void UnmarshallResult(JsonUnmarshallerContext context, ListMultipartUploadsResponse response)
        {
            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

            while (context.Read())
            {
                if (context.TestExpression("UploadsList", targetDepth))
                {
                    context.Read();

                    if (context.CurrentTokenType == JsonToken.Null)
                    {
                        response.UploadsList = null;
                        continue;
                    }
                    response.UploadsList = new List <UploadListElement>();
                    UploadListElementUnmarshaller unmarshaller = UploadListElementUnmarshaller.GetInstance();
                    while (context.Read())
                    {
                        JsonToken token = context.CurrentTokenType;
                        if (token == JsonToken.ArrayStart)
                        {
                            continue;
                        }
                        if (token == JsonToken.ArrayEnd)
                        {
                            break;
                        }
                        response.UploadsList.Add(unmarshaller.Unmarshall(context));
                    }
                    continue;
                }

                if (context.TestExpression("Marker", targetDepth))
                {
                    context.Read();
                    response.Marker = StringUnmarshaller.GetInstance().Unmarshall(context);
                    continue;
                }

                if (context.CurrentDepth <= originalDepth)
                {
                    return;
                }
            }

            return;
        }
示例#13
0
        public void RemoveAllMultiUploads(String bucketName)
        {
            BosClient client = this.GenerateBosClient();
            ListMultipartUploadsResponse list = client.ListMultipartUploads(bucketName);

            foreach (MultipartUploadSummary summary in list.Uploads)
            {
                String uploadID = summary.UploadId;
                String key      = summary.Key;
                String name     = summary.Owner.DisplayName;

                client.AbortMultipartUpload(bucketName, key, uploadID);
                String sss = "";
            }
        }
    public async Task ListMultipartUploads(S3Provider provider, string _, ISimpleClient client)
    {
        await CreateTempBucketAsync(provider, client, async tempBucket =>
        {
            //The percentage sign at the end is to test if encoding works correctly
            string objName = nameof(ListMultipartUploads) + "%";

            CreateMultipartUploadResponse createResp = await client.CreateMultipartUploadAsync(tempBucket, objName).ConfigureAwait(false);
            Assert.Equal(200, createResp.StatusCode);

            byte[] file = new byte[5 * 1024];

            await using (MemoryStream ms = new MemoryStream(file))
                await client.UploadPartAsync(tempBucket, objName, 1, createResp.UploadId, ms).ConfigureAwait(false);

            ListMultipartUploadsResponse listResp = await client.ListMultipartUploadsAsync(tempBucket, r => r.EncodingType = EncodingType.Url).ConfigureAwait(false);
            Assert.Equal(200, listResp.StatusCode);
            Assert.Equal(tempBucket, listResp.Bucket);

            if (provider == S3Provider.AmazonS3)
            {
                Assert.Equal(WebUtility.UrlEncode(objName), listResp.NextKeyMarker);
                Assert.NotEmpty(listResp.NextUploadIdMarker);
            }

            Assert.Equal(1000, listResp.MaxUploads);
            Assert.False(listResp.IsTruncated);

            S3Upload?upload = Assert.Single(listResp.Uploads);
            Assert.Equal(WebUtility.UrlEncode(objName), upload.ObjectKey);

            if (provider == S3Provider.AmazonS3)
            {
                Assert.Equal(listResp.NextUploadIdMarker, upload.UploadId);
            }

            Assert.Equal(StorageClass.Standard, upload.StorageClass);
            Assert.Equal(DateTime.UtcNow, upload.Initiated.DateTime, TimeSpan.FromSeconds(5));
        }).ConfigureAwait(false);
    }
示例#15
0
        public override void Execute()
        {
            if (string.IsNullOrEmpty(this._bucketName))
            {
                throw new InvalidOperationException("The bucketName Specified is null or empty!");
            }

            ListMultipartUploadsResponse listResponse = new ListMultipartUploadsResponse();

            do
            {
                ListMultipartUploadsRequest listRequest = new ListMultipartUploadsRequest()
                {
                    BucketName     = this._bucketName,
                    KeyMarker      = listResponse.KeyMarker,
                    UploadIdMarker = listResponse.NextUploadIdMarker,
                };
                listRequest.BeforeRequestEvent += this.RequestEventHandler;

                listResponse = this._s3Client.ListMultipartUploads(listRequest);
                foreach (MultipartUpload upload in listResponse.MultipartUploads)
                {
                    if (upload.Initiated < this._initiatedDate)
                    {
                        var abortRequest = new AbortMultipartUploadRequest()
                        {
                            BucketName = this._bucketName,
                            Key        = upload.Key,
                            UploadId   = upload.UploadId,
                        };
                        abortRequest.BeforeRequestEvent += this.RequestEventHandler;

                        this._s3Client.AbortMultipartUpload(abortRequest);
                    }
                }
            }while (listResponse.IsTruncated);
        }
示例#16
0
        public override void Execute()
        {
            if (string.IsNullOrEmpty(this._bucketName))
            {
                throw new InvalidOperationException("The bucketName Specified is null or empty!");
            }

            ListMultipartUploadsResponse listResponse = new ListMultipartUploadsResponse();

            do
            {
                ListMultipartUploadsRequest listRequest = ConstructListMultipartUploadsRequest(listResponse);

                listResponse = this._s3Client.ListMultipartUploads(listRequest);
                foreach (MultipartUpload upload in listResponse.MultipartUploads)
                {
                    if (upload.Initiated < this._initiatedDate)
                    {
                        var abortRequest = ConstructAbortMultipartUploadRequest(upload);
                        this._s3Client.AbortMultipartUpload(abortRequest);
                    }
                }
            }while (listResponse.IsTruncated);
        }
示例#17
0
        private static void UnmarshallResult(XmlUnmarshallerContext context, ListMultipartUploadsResponse response)
        {
            int currentDepth = context.get_CurrentDepth();
            int num          = currentDepth + 1;

            if (context.get_IsStartOfDocument())
            {
                num += 2;
            }
            while (context.Read())
            {
                if (context.get_IsStartElement() || context.get_IsAttribute())
                {
                    if (context.TestExpression("Bucket", num))
                    {
                        response.BucketName = StringUnmarshaller.GetInstance().Unmarshall(context);
                    }
                    else if (context.TestExpression("KeyMarker", num))
                    {
                        response.KeyMarker = StringUnmarshaller.GetInstance().Unmarshall(context);
                    }
                    else if (context.TestExpression("UploadIdMarker", num))
                    {
                        response.UploadIdMarker = StringUnmarshaller.GetInstance().Unmarshall(context);
                    }
                    else if (context.TestExpression("NextKeyMarker", num))
                    {
                        response.NextKeyMarker = StringUnmarshaller.GetInstance().Unmarshall(context);
                    }
                    else if (context.TestExpression("NextUploadIdMarker", num))
                    {
                        response.NextUploadIdMarker = StringUnmarshaller.GetInstance().Unmarshall(context);
                    }
                    else if (context.TestExpression("MaxUploads", num))
                    {
                        response.MaxUploads = IntUnmarshaller.GetInstance().Unmarshall(context);
                    }
                    else if (context.TestExpression("IsTruncated", num))
                    {
                        response.IsTruncated = BoolUnmarshaller.GetInstance().Unmarshall(context);
                    }
                    else if (context.TestExpression("Upload", num))
                    {
                        response.MultipartUploads.Add(MultipartUploadUnmarshaller.Instance.Unmarshall(context));
                    }
                    else if (context.TestExpression("Delimiter", num))
                    {
                        response.Delimiter = StringUnmarshaller.GetInstance().Unmarshall(context);
                    }
                    else if (context.TestExpression("Prefix", num))
                    {
                        response.Prefix = StringUnmarshaller.GetInstance().Unmarshall(context);
                    }
                    else if (context.TestExpression("CommonPrefixes", num))
                    {
                        string text = CommonPrefixesItemUnmarshaller.Instance.Unmarshall(context);
                        if (text != null)
                        {
                            response.CommonPrefixes.Add(text);
                        }
                    }
                }
                else if (context.get_IsEndElement() && context.get_CurrentDepth() < currentDepth)
                {
                    break;
                }
            }
        }
示例#18
0
        private static void Main(string[] args)
        {
            BosClient    client     = SampleUtil.GetSampleBosClient();
            const string bucketName = "sample-bucket-multi-upload1"; //示例Bucket名称

            // 初始化:创建示例Bucket
            client.CreateBucket(bucketName); //指定Bucket名称
            string objectKey = "sample";

            // 1.开始Multipart Upload
            InitiateMultipartUploadRequest initiateMultipartUploadRequest =
                new InitiateMultipartUploadRequest()
            {
                BucketName = bucketName, Key = objectKey
            };
            InitiateMultipartUploadResponse initiateMultipartUploadResponse =
                client.InitiateMultipartUpload(initiateMultipartUploadRequest);

            // 2.获取Bucket内的Multipart Upload
            ListMultipartUploadsRequest listMultipartUploadsRequest =
                new ListMultipartUploadsRequest()
            {
                BucketName = bucketName
            };
            ListMultipartUploadsResponse listMultipartUploadsResponse =
                client.ListMultipartUploads(listMultipartUploadsRequest);

            foreach (MultipartUploadSummary multipartUpload in listMultipartUploadsResponse.Uploads)
            {
                Console.WriteLine("Key: " + multipartUpload.Key + " UploadId: " + multipartUpload.UploadId);
            }

            // 3.分块上传,首先设置每块为 5Mb
            long     partSize = 1024 * 1024 * 5L;
            FileInfo partFile = new FileInfo("d:\\lzb\\sample");
            // 计算分块数目
            int partCount = (int)(partFile.Length / partSize);

            if (partFile.Length % partSize != 0)
            {
                partCount++;
            }
            // 新建一个List保存每个分块上传后的ETag和PartNumber
            List <PartETag> partETags = new List <PartETag>();

            for (int i = 0; i < partCount; i++)
            {
                // 获取文件流
                Stream stream = partFile.OpenRead();
                // 跳到每个分块的开头
                long skipBytes = partSize * i;
                stream.Seek(skipBytes, SeekOrigin.Begin);
                // 计算每个分块的大小
                long size = Math.Min(partSize, partFile.Length - skipBytes);
                // 创建UploadPartRequest,上传分块
                UploadPartRequest uploadPartRequest = new UploadPartRequest();
                uploadPartRequest.BucketName  = bucketName;
                uploadPartRequest.Key         = objectKey;
                uploadPartRequest.UploadId    = initiateMultipartUploadResponse.UploadId;
                uploadPartRequest.InputStream = stream;
                uploadPartRequest.PartSize    = size;
                uploadPartRequest.PartNumber  = i + 1;
                UploadPartResponse uploadPartResponse = client.UploadPart(uploadPartRequest);
                // 将返回的PartETag保存到List中。
                partETags.Add(new PartETag()
                {
                    ETag       = uploadPartResponse.ETag,
                    PartNumber = uploadPartResponse.PartNumber
                });
                // 关闭文件
                stream.Close();
            }

            // 4. 获取UploadId的所有Upload Part
            ListPartsRequest listPartsRequest = new ListPartsRequest()
            {
                BucketName = bucketName,
                Key        = objectKey,
                UploadId   = initiateMultipartUploadResponse.UploadId,
            };
            // 获取上传的所有Part信息
            ListPartsResponse listPartsResponse = client.ListParts(listPartsRequest);

            // 遍历所有Part
            foreach (PartSummary part in listPartsResponse.Parts)
            {
                Console.WriteLine("PartNumber: " + part.PartNumber + " ETag: " + part.ETag);
            }

            // 5. 完成分块上传
            CompleteMultipartUploadRequest completeMultipartUploadRequest =
                new CompleteMultipartUploadRequest()
            {
                BucketName = bucketName,
                Key        = objectKey,
                UploadId   = initiateMultipartUploadResponse.UploadId,
                PartETags  = partETags
            };
            CompleteMultipartUploadResponse completeMultipartUploadResponse =
                client.CompleteMultipartUpload(completeMultipartUploadRequest);

            Console.WriteLine(completeMultipartUploadResponse.ETag);
            Console.ReadKey();
        }
示例#19
0
        private static void UnmarshallResult(XmlUnmarshallerContext context, ListMultipartUploadsResponse response)
        {
            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

            if (context.IsStartOfDocument)
            {
                targetDepth += 2;
            }

            while (context.Read())
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("Bucket", targetDepth))
                    {
                        response.BucketName = StringUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("KeyMarker", targetDepth))
                    {
                        response.KeyMarker = StringUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("UploadIdMarker", targetDepth))
                    {
                        response.UploadIdMarker = StringUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("NextKeyMarker", targetDepth))
                    {
                        response.NextKeyMarker = StringUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("NextUploadIdMarker", targetDepth))
                    {
                        response.NextUploadIdMarker = StringUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("MaxUploads", targetDepth))
                    {
                        response.MaxUploads = IntUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("IsTruncated", targetDepth))
                    {
                        response.IsTruncated = BoolUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("Upload", targetDepth))
                    {
                        response.MultipartUploads.Add(MultipartUploadUnmarshaller.Instance.Unmarshall(context));

                        continue;
                    }
                    if (context.TestExpression("Delimiter", targetDepth))
                    {
                        response.Delimiter = StringUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("Prefix", targetDepth))
                    {
                        response.Prefix = StringUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("CommonPrefixes", targetDepth))
                    {
                        var prefix = CommonPrefixesItemUnmarshaller.Instance.Unmarshall(context);

                        if (prefix != null)
                        {
                            response.CommonPrefixes.Add(prefix);
                        }

                        continue;
                    }
                }
                else if (context.IsEndElement && context.CurrentDepth < originalDepth)
                {
                    return;
                }
            }

            return;
        }
        public override async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            if (string.IsNullOrEmpty(this._bucketName))
            {
                throw new InvalidOperationException("The bucketName specified is null or empty!");
            }

            SemaphoreSlim           asyncThrottler = null;
            CancellationTokenSource internalCts    = null;

            try
            {
                asyncThrottler = new SemaphoreSlim(_config.ConcurrentServiceRequests);
                internalCts    = new CancellationTokenSource();
                var internalCancellationToken = internalCts.Token;

                ListMultipartUploadsResponse listResponse = new ListMultipartUploadsResponse();
                var pendingTasks = new List <Task <AbortMultipartUploadResponse> >();
                do
                {
                    ListMultipartUploadsRequest listRequest = ConstructListMultipartUploadsRequest(listResponse);
                    listResponse = await this._s3Client.ListMultipartUploadsAsync(listRequest, cancellationToken)
                                   .ConfigureAwait(continueOnCapturedContext: false);

                    foreach (MultipartUpload upload in listResponse.MultipartUploads)
                    {
                        cancellationToken.ThrowIfCancellationRequested();
                        if (internalCancellationToken.IsCancellationRequested)
                        {
                            // Operation cancelled as one of the AbortMultipartUpload requests failed with an exception,
                            // don't schedule any more AbortMultipartUpload tasks.
                            // Don't throw an OperationCanceledException here as we want to process the
                            // responses and throw the original exception.
                            break;
                        }
                        if (upload.Initiated < this._initiatedDate)
                        {
                            await asyncThrottler.WaitAsync(cancellationToken)
                            .ConfigureAwait(continueOnCapturedContext: false);

                            var abortRequest = ConstructAbortMultipartUploadRequest(upload);
                            var task         = AbortAsync(abortRequest, internalCts, cancellationToken, asyncThrottler);
                            pendingTasks.Add(task);
                        }
                    }
                }while (listResponse.IsTruncated);

                await WhenAllOrFirstExceptionAsync(pendingTasks, cancellationToken)
                .ConfigureAwait(continueOnCapturedContext: false);
            }
            finally
            {
                if (internalCts != null)
                {
                    internalCts.Dispose();
                }

                if (asyncThrottler != null)
                {
                    asyncThrottler.Dispose();
                }
            }
        }