上传blob并在一次交易中获得租约

时间:2015-03-20 06:52:17

标签: azure azure-storage-blobs

是否可以上传到blob存储并在同一事务中获取该blob上的租约。这将是为了避免潜在的竞争条件。

以下代码执行上述操作,但是作为两个不同的事务:

blob.UploadText(String.Empty);
blob.AcquireLease(TimeSpan.FromSeconds(60), leaseId);

如果另一个线程/进程/实例必须在上述两个事务之间获取该blob的租约,那么将抛出StorageException(HTTP代码412)。

这可以通过捕获此类异常来缓解,如下所示,但是如果无法在一个事务中执行上载和租用获取,我们无法保证在上载后该线程将租用blob。

blob.UploadText(String.Empty);

try
{
    blob.AcquireLease(TimeSpan.FromSeconds(60), leaseId);
}
catch (StorageException ex)
{
    if (ex.RequestInformation.HttpStatusCode != 412)
    {
        throw;
    }
}

1 个答案:

答案 0 :(得分:1)

AFAIK,今天无法在一次交易中上传和获得租约。

查看上面的代码,你不能将blob.UploadText放在同一个try / catch块中吗?这样,如果第一个线程已获得租约,则第二个线程的上传操作将失败。此外,由于这些操作是按顺序而不是并行发生的,因此上传blob的线程很可能会获得租约。你需要尝试一下。

相关问题