Можно ли загружать в хранилище blob и приобретать аренду на этом блоке в рамках одной транзакции. Это должно было бы избежать потенциального состояния гонки.Загрузить blob и приобрести арендную плату за одну транзакцию
Следующий код делает выше, но как два отдельных сделки:
blob.UploadText(String.Empty);
blob.AcquireLease(TimeSpan.FromSeconds(60), leaseId);
Если другой поток/процесс/экземпляр должен был приобрести в лизинг на этом сгусток между двумя вышеуказанными сделками, то код StorageException
(HTTP 412).
Это можно смягчить, если вы поймаете такие исключения, как показано ниже, но без возможности выполнить покупку и покупку в ходе одной транзакции мы не можем гарантировать, что blob будет арендован этим потоком после загрузки.
blob.UploadText(String.Empty);
try
{
blob.AcquireLease(TimeSpan.FromSeconds(60), leaseId);
}
catch (StorageException ex)
{
if (ex.RequestInformation.HttpStatusCode != 412)
{
throw;
}
}
Можете ли вы описать свой сценарий более подробно, особенно «избегать потенциального состояния гонки»? –
@GauravMantri: Я обновил свой вопрос. Дайте мне знать, если этого недостаточно. – davenewza