private void BeginPutBlockList(BlobTransferContext transferContext)
{
if (transferContext.CancellationToken.IsCancellationRequested)
{
return;
}
OperationContext operationContext = new OperationContext();
operationContext.ClientRequestID = transferContext.ClientRequestId;
List<string> blockids = new List<string>();
for (int i = 0; i < (transferContext.Length + transferContext.BlockSize - 1) / transferContext.BlockSize; i++)
{
blockids.Add(
Convert.ToBase64String(
Encoding.ASCII.GetBytes(string.Format(CultureInfo.InvariantCulture, "BlockId{0:d7}", i))));
}
transferContext.Blob.BeginPutBlockList(
blockids,
AccessCondition.GenerateEmptyCondition(),
transferContext.BlobRequestOptions,
operationContext,
ar =>
{
SuccessfulOrRetryableResult wasWriteSuccessful = EndPutBlockList(transferContext, ar);
Interlocked.Decrement(ref transferContext.NumInProgressUploadDownloads);
if (wasWriteSuccessful.IsRetryable)
{
BeginPutBlockList(transferContext);
return;
}
transferContext.IsComplete = true;
},
state: null);
}