复制时如何获得对Blob的排他锁?

时间:2019-07-16 14:50:43

标签: c# azure-storage-blobs

我们如何确保在尝试将blob移动到其他容器时不会遇到竞争情况,即同一函数的2个实例试图移动同一blob?

我有执行相同代码的单独函数:

    public static async Task MoveBlobInSameStorageAccount(string name, string from, string to, string connection)
    {
        CloudStorageAccount.TryParse(connection, out CloudStorageAccount storageAccount);
        var blobClient = storageAccount.CreateCloudBlobClient();
        var sourceContainer = blobClient.GetContainerReference(from);
        var sourceBlob = sourceContainer.GetBlockBlobReference(name);
        var destinationContainer = blobClient.GetContainerReference(to);
        var destinationBlob = destinationContainer.GetBlockBlobReference(name);
        await destinationBlob.StartCopyAsync(sourceBlob);
        await sourceBlob.DeleteAsync();
    }

我们如何确保在复制Blob时,另一个进程不会尝试读取/复制同一Blob?

1 个答案:

答案 0 :(得分:2)

您可以仅租借要复制的Blob。 当客户获得租赁时,将返回租赁ID。如果未在获取请求中指定租约ID,则Blob服务将生成一个租约ID。客户可以使用此租约ID续订租约,更改其租约ID或释放租约。

激活租约时,必须在修改Blob的请求中包含租约ID;当激活租约时,必须在请求中包含租约ID

有关详细信息,请参考以下参考文档:https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob

相关问题