Я пытался добавить логику повторения, но, похоже, она не работает.
В исключении catch я добавил вызов метода для возобновления передачи:
...
catch (Exception e) {
ResumeTransfert(context, pathFile, blockBlob);
}
private void ResumeTransfert(SingleTransferContext context, string pathFile, CloudBlockBlob blockBlob)
{
SingleTransferContext retryContext = context;
SingleTransferContext resumeContext = null;
while (true)
{
try
{
// Store the transfer checkpoint
TransferCheckpoint checkpoint = retryContext.LastCheckpoint;
// Create a new TransferContext with the store checkpoint
resumeContext = new SingleTransferContext(checkpoint);
resumeContext.ProgressHandler = new Progress<TransferStatus>((progress) => {
if (progress.BytesTransferred > 0)
{
double byteTransferred = Math.Truncate(ByteSize.FromBytes(progress.BytesTransferred).MegaBytes);
Log.WriteLog(String.Format("Uploaded: {0} MB", byteTransferred));
}
});
// Record the overall progress
ProgressRecorder recorder = new ProgressRecorder();
resumeContext.ProgressHandler = recorder;
// Resume transfer from the stored checkpoint
Console.WriteLine("Resume the cancelled transfer.");
var task = TransferManager.UploadAsync(pathFile, blockBlob, null, resumeContext);
task.Wait();
return;
}
catch (Exception e)
{
Log.WriteLog("ResumeTransfert: " + e.Message, LogType.Error, LogLevel.Standard);
retryContext = resumeContext;
continue;
}
}
}
Каждый раз, когда я ловлю исключение и перезагружаюсь с последней контрольной точкой, но это не работает.Где я не прав?
Спасибо.