Я разрабатываю приложение, и время от времени я получаю ошибку, мне нужно синхронизировать несколько рабочих ролей с арендой на блобе.CloubBlockBlob AcquireLease дает две аренды двум рабочим роликам
Ниже мой инициализации код для работника роли
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("StorageAccount"));
string blobContainerName = RoleEnvironment.GetConfigurationSettingValue("BlobContainer");
CloudBlobContainer blobContainer = storageAccount.CreateCloudBlobClient().GetContainerReference(blobContainerName);
blobContainer.CreateIfNotExists();
string blobName = RoleEnvironment.GetConfigurationSettingValue("BlobToBeLeased");
_blob = blobContainer.GetBlockBlobReference(blobName);
if (!_blob.Exists())
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("This is dummy data")))
{
try
{
_blob.UploadFromStream(ms);
}
catch (StorageException storageException)
{
if (storageException.RequestInformation.HttpStatusCode != 412)
throw;
}
}
}
А вот мой метод AcquireLease:
private void AcquireLease()
{
try
{
var leaseId = _blob.AcquireLease(null, null);
Trace.WriteLine("==========> Lease acquired! <========== ID => " + leaseId);
_accessCondition = new AccessCondition {LeaseId = leaseId};
}
catch (Exception)
{
Trace.WriteLine("==========> Lease rejected! <==========");
}
}
Скриншот проблемы:
Проблема заключается в том, когда я позвоните по методу AcquireLease, он иногда дает мне две аренды ... У кого-нибудь есть идея, как это решить ...
Операции CloudBlockBlob атомарны?
это не так правильно ... –