首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个事务中移动多个节点?

如何在一个事务中移动多个节点?
EN

Stack Overflow用户
提问于 2019-07-15 19:39:08
回答 1查看 810关注 0票数 3

如何在一个事务中移动多个blobs?

我现在一次移动一小块,如下所示:

代码语言:javascript
复制
    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从源容器移动到目标容器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-16 01:05:24

您可以使用Microsoft Azure存储数据移动库。我最近在一个项目中使用了它,效果很好。

具体来说,您要使用:

CopyDirectoryAsync

GitHub回购中有一个示例文件夹,您可以引用它。我不需要示例中的大部分代码,所以我修改了:

BlobDirectoryCopySample

我还在示例文件夹中使用了功用类。您也可以设置ParallelOperations,它“获取或设置一个值,指示要并发处理的工作项有多少”。

代码语言:javascript
复制
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);
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57046200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档