Продлите аренду BLOB-объектов, если blob.upload занимает более 60 секунд.

Я знаю, что мы можем получить аренду большого двоичного объекта на 60 секунд или бесконечно. Для следующего кода:

  var account = CloudStorageAccount.DevelopmentStorageAccount;
  var blob = account.CreateCloudBlobClient().GetBlobReference("container/blob");
  var leaseId = blob.AcquireLease();
  blob.UploadByteArray(bytes);
  blob.ReleaseLease(leaseId);

Если время uploadBtyeArray зависит от размера файла. Как продлить аренду, пока загрузка не будет завершена.

С уважением, Вивек


person Vivek Misra    schedule 05.10.2012    source источник


Ответы (1)


После вызова AcquireLease вы можете запустить новый поток, который постоянно обновляет аренду непосредственно перед ее истечением. Как только загрузка будет завершена, вы должны просто прервать поток, который выполняет автоматическое обновление.

Возможно, вы захотите взглянуть на WazStorageExtensions Стива Маркса, который поставляется с классом AutoRenewLease.cs">AutoRenewLease (см. в методе DoOnce). Внутри класс AutoRenewLease использует такой поток для сохранения аренды:

            renewalThread = new Thread(() =>
            {
                while (true)
                {
                    Thread.Sleep(TimeSpan.FromSeconds(40));
                    blob.RenewLease(leaseId);
                }
            });
            renewalThread.Start();
person Sandrino Di Mattia    schedule 05.10.2012
comment
Спасибо, Сандрино!.. С помощью этого метода позаботится ли об асинхронной загрузке? - person Vivek Misra; 05.10.2012
comment
Можем ли мы иметь бесконечную аренду на blob.upload, и как только загрузка будет завершена, мы можем сломать ее. - person Vivek Misra; 05.10.2012
comment
Да, но я не думаю, что вы можете использовать .NET SDK для этого (он все еще использует 2011-08-18, если я прав). REST API поддерживает неограниченную аренду, начиная с версии 2012-02-12 msdn.microsoft. .com/en-us/library/windowsazure/ee691972.aspx - person Sandrino Di Mattia; 05.10.2012
comment
@andrino да, но если рабочий, обрабатывающий большой двоичный объект, умрет, никто никогда не узнает, что нужно снова начать обработку большого двоичного объекта :-\ - person viggity; 04.02.2014