Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. using System;
  2. using System.Threading.Tasks;
  3. using System.Collections.Generic;
  4. using static System.Console;
  5.  
  6. namespace tasks
  7. {
  8. public class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. WriteLine("** Start");
  13. WriteLine("** Update Data");
  14.  
  15. var requester = new DataRequester();
  16. requester.UpdateData();
  17.  
  18. WriteLine("** Ending...");
  19. Console.ReadLine();
  20. }
  21. }
  22. public class DataEventArgs: EventArgs
  23. {
  24. public string FileName {get; set;}
  25. public List<string> Data {get; set;}
  26. public DataEventArgs(string fileName, List<string> data)
  27. {
  28. FileName = fileName;
  29. Data = data;
  30. }
  31. }
  32. public class DataRequester
  33. {
  34. public void UpdateData()
  35. {
  36. // The real code loads fileNames from a CSV File
  37. var numberOfCSVFiles = 1000;
  38. var fileNames = new string[numberOfCSVFiles];
  39. var loader = new DataLoader(fileNames);
  40. loader.OnDataLoaded += HandleDataLoaded;
  41. loader.OnDataNotFound += HandleDataNotFound;
  42. loader.RequestData();
  43. }
  44. public void HandleDataLoaded(object sender, DataEventArgs args)
  45. {
  46. WriteLine($"Received the data for file: {args.FileName}");
  47.  
  48. // Update SQLite Database ...
  49. }
  50. public void HandleDataNotFound(object sender, DataEventArgs args)
  51. {
  52. WriteLine($"Data not found for file: {args.FileName}");
  53. }
  54. }
  55. public class DataLoader
  56. {
  57. public event EventHandler<DataEventArgs> OnDataLoaded;
  58. public event EventHandler<DataEventArgs> OnDataNotFound;
  59. public string[] FileNames {get; set;}
  60. public DataLoader(string[] fileNames){FileNames = fileNames;}
  61. private bool CheckFileName(string fileName)
  62. {
  63. var random = new Random();
  64. var fileExists = (random.Next(4)<3)?true:false;
  65. return fileExists;
  66. }
  67. private DataEventArgs LoadData(string fileName)
  68. {
  69. // Simulate data loading
  70. var random = new Random();
  71. Task.Delay(random.Next(10)*1000).Wait();
  72. return new DataEventArgs(fileName, new List<string>());
  73. }
  74. private Task<DataEventArgs> LoadDataAsync(string fileName)
  75. {
  76. return Task.Run<DataEventArgs>(() =>
  77. {
  78. return LoadData(fileName);
  79. });
  80. }
  81. public async void RequestData()
  82. {
  83. var tasks = new List<Task>();
  84.  
  85. for(int i=0; i<FileNames.Length; i++)
  86. {
  87. var fileName = String.Concat("file #",(i+1).ToString());
  88. if(CheckFileName(fileName))
  89. {
  90. var task = LoadDataAsync(fileName).ContinueWith((t) =>
  91. {
  92. OnDataLoaded(this, t.Result);
  93. });
  94.  
  95. tasks.Add(task);
  96. }
  97. else
  98. {
  99. var args = new DataEventArgs(fileName, new List<string>());
  100. OnDataNotFound?.Invoke(this, args);
  101. }
  102. }
  103.  
  104. await Task.WhenAll(tasks);
  105. WriteLine("Request completed.");
  106. }
  107. }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement