如何在一个事务中移动多个blobs?
我现在一次移动一小块,如下所示:
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();
}不过,我需要一次能移动5-10个气泡。
如何将一个事务中的多个blobs从源容器移动到目标容器?
发布于 2019-07-16 01:05:24
您可以使用Microsoft Azure存储数据移动库。我最近在一个项目中使用了它,效果很好。
具体来说,您要使用:
CopyDirectoryAsync
GitHub回购中有一个示例文件夹,您可以引用它。我不需要示例中的大部分代码,所以我修改了:
BlobDirectoryCopySample
我还在示例文件夹中使用了功用类。您也可以设置ParallelOperations,它“获取或设置一个值,指示要并发处理的工作项有多少”。
namespace DataMovementSamples
{
using System;
#if !DOTNET5_4
#endif
using System.Threading.Tasks;
using Microsoft.Azure.Storage.DataMovement;
public class Program
{
public static async Task Main(string[] args)
{
try
{
Console.WriteLine();
Console.WriteLine("Data movement directory copy sample.");
await BlobDirectoryCopySample();
}
finally
{
Console.WriteLine();
Console.WriteLine("Cleanup generated data.");
}
}
private static async Task BlobDirectoryCopySample()
{
var sourceBlobDir = await Util.GetCloudBlobDirectoryAsync("sourcecontainer", "dir1");
var destBlobDir = await Util.GetCloudBlobDirectoryAsync("targetcontainer", "dir2");
var options = new CopyDirectoryOptions()
{
Recursive = true,
};
var context = new DirectoryTransferContext();
context.FileTransferred += FileTransferredCallback;
context.FileFailed += FileFailedCallback;
context.FileSkipped += FileSkippedCallback;
TransferManager.Configurations.ParallelOperations = 50;
Console.WriteLine("Transfer started");
try
{
Task task = TransferManager.CopyDirectoryAsync(sourceBlobDir, destBlobDir, false, options, context);
await task;
}
catch (Exception e)
{
Console.WriteLine("The transfer is cancelled: {0}", e.Message);
}
Console.WriteLine("The transfer is completed.");
}
private static void FileTransferredCallback(object sender, TransferEventArgs e)
{
Console.WriteLine("Transfer Succeeds. {0} -> {1}.", e.Source, e.Destination);
}
private static void FileFailedCallback(object sender, TransferEventArgs e)
{
Console.WriteLine("Transfer fails. {0} -> {1}. Error message:{2}", e.Source, e.Destination, e.Exception.Message);
}
private static void FileSkippedCallback(object sender, TransferEventArgs e)
{
Console.WriteLine("Transfer skips. {0} -> {1}.", e.Source, e.Destination);
}
}
}https://stackoverflow.com/questions/57046200
复制相似问题