Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var copyBlock = DataflowBlockManager.CreateBlobCopyBlock(new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = ExecutionDataflowBlockOptions.Unbounded });
- var waitBlock = DataflowBlockManager.CreateWaitCopyStateBlock(new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = ExecutionDataflowBlockOptions.Unbounded });
- copyBlock.LinkTo(waitBlock);
- //For 1000000 blobs
- await copyBlock.SendAsync(new BlobCopyOptions { Source = new Uri(sourceBlob.Uri + sourceInfo.Sas), Target = destBlob });
- //end for
- await DataflowBlockManager.CompleteBlocksAsync(copyBlock, waitBlock);
- public class BlobCopyOptions
- {
- public Uri Source { get; set; }
- public CloudBlockBlob Target { get; set; }
- }
- public static class DataflowBlockManager
- {
- public static ExecutionDataflowBlockOptions CreateUnBoundExecutionDataFlowBlockOptions ()
- {
- return new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = ExecutionDataflowBlockOptions.Unbounded };
- }
- public static IPropagatorBlock<BlobCopyOptions, CloudBlockBlob> CreateBlobCopyBlock(ExecutionDataflowBlockOptions options)
- {
- return new TransformBlock<BlobCopyOptions, CloudBlockBlob>(async data =>
- {
- // Copy the file
- await data.Target.StartCopyFromBlobAsync(data.Source);
- return data.Target;
- }, options);
- }
- public static ITargetBlock<CloudBlockBlob> CreateWaitCopyStateBlock(ExecutionDataflowBlockOptions options)
- {
- return new ActionBlock<CloudBlockBlob>(async target =>
- {
- if (target.CopyState != null)
- {
- do
- {
- if (target.CopyState.TotalBytes.HasValue)
- await Task.Delay(Math.Min(10000, Math.Max(1000, (int)(target.CopyState.TotalBytes / 10000))));
- await target.FetchAttributesAsync();
- }
- while (!target.CopyState.CompletionTime.HasValue);
- }
- }, options);
- }
- public static async Task CompleteBlocksAsync(params IDataflowBlock[] blocks)
- {
- foreach (var block in blocks)
- {
- block.Complete();
- await block.Completion;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement