Advertisement
Guest User

Untitled

a guest
Jul 29th, 2014
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. var copyBlock = DataflowBlockManager.CreateBlobCopyBlock(new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = ExecutionDataflowBlockOptions.Unbounded });
  2. var waitBlock = DataflowBlockManager.CreateWaitCopyStateBlock(new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = ExecutionDataflowBlockOptions.Unbounded });
  3. copyBlock.LinkTo(waitBlock);
  4.  
  5. //For 1000000 blobs
  6. await copyBlock.SendAsync(new BlobCopyOptions { Source = new Uri(sourceBlob.Uri + sourceInfo.Sas), Target = destBlob });
  7. //end for
  8.  
  9. await DataflowBlockManager.CompleteBlocksAsync(copyBlock, waitBlock);
  10.  
  11. public class BlobCopyOptions
  12. {
  13. public Uri Source { get; set; }
  14. public CloudBlockBlob Target { get; set; }
  15. }
  16. public static class DataflowBlockManager
  17. {
  18. public static ExecutionDataflowBlockOptions CreateUnBoundExecutionDataFlowBlockOptions ()
  19. {
  20. return new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = ExecutionDataflowBlockOptions.Unbounded };
  21. }
  22.  
  23. public static IPropagatorBlock<BlobCopyOptions, CloudBlockBlob> CreateBlobCopyBlock(ExecutionDataflowBlockOptions options)
  24. {
  25. return new TransformBlock<BlobCopyOptions, CloudBlockBlob>(async data =>
  26. {
  27. // Copy the file
  28. await data.Target.StartCopyFromBlobAsync(data.Source);
  29. return data.Target;
  30. }, options);
  31. }
  32. public static ITargetBlock<CloudBlockBlob> CreateWaitCopyStateBlock(ExecutionDataflowBlockOptions options)
  33. {
  34. return new ActionBlock<CloudBlockBlob>(async target =>
  35. {
  36. if (target.CopyState != null)
  37. {
  38. do
  39. {
  40. if (target.CopyState.TotalBytes.HasValue)
  41. await Task.Delay(Math.Min(10000, Math.Max(1000, (int)(target.CopyState.TotalBytes / 10000))));
  42. await target.FetchAttributesAsync();
  43. }
  44. while (!target.CopyState.CompletionTime.HasValue);
  45.  
  46. }
  47. }, options);
  48. }
  49.  
  50. public static async Task CompleteBlocksAsync(params IDataflowBlock[] blocks)
  51. {
  52. foreach (var block in blocks)
  53. {
  54. block.Complete();
  55. await block.Completion;
  56. }
  57. }
  58.  
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement