Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading.Tasks;
- using System.Collections.Generic;
- using static System.Console;
- namespace tasks
- {
- public class Program
- {
- static void Main(string[] args)
- {
- WriteLine("** Start");
- WriteLine("** Update Data");
- var requester = new DataRequester();
- requester.UpdateData();
- WriteLine("** Ending...");
- Console.ReadLine();
- }
- }
- public class DataEventArgs: EventArgs
- {
- public string FileName {get; set;}
- public List<string> Data {get; set;}
- public DataEventArgs(string fileName, List<string> data)
- {
- FileName = fileName;
- Data = data;
- }
- }
- public class DataRequester
- {
- public void UpdateData()
- {
- // The real code loads fileNames from a CSV File
- var numberOfCSVFiles = 1000;
- var fileNames = new string[numberOfCSVFiles];
- var loader = new DataLoader(fileNames);
- loader.OnDataLoaded += HandleDataLoaded;
- loader.OnDataNotFound += HandleDataNotFound;
- loader.RequestData();
- }
- public void HandleDataLoaded(object sender, DataEventArgs args)
- {
- WriteLine($"Received the data for file: {args.FileName}");
- // Update SQLite Database ...
- }
- public void HandleDataNotFound(object sender, DataEventArgs args)
- {
- WriteLine($"Data not found for file: {args.FileName}");
- }
- }
- public class DataLoader
- {
- public event EventHandler<DataEventArgs> OnDataLoaded;
- public event EventHandler<DataEventArgs> OnDataNotFound;
- public string[] FileNames {get; set;}
- public DataLoader(string[] fileNames){FileNames = fileNames;}
- private bool CheckFileName(string fileName)
- {
- var random = new Random();
- var fileExists = (random.Next(4)<3)?true:false;
- return fileExists;
- }
- private DataEventArgs LoadData(string fileName)
- {
- // Simulate data loading
- var random = new Random();
- Task.Delay(random.Next(10)*1000).Wait();
- return new DataEventArgs(fileName, new List<string>());
- }
- private Task<DataEventArgs> LoadDataAsync(string fileName)
- {
- return Task.Run<DataEventArgs>(() =>
- {
- return LoadData(fileName);
- });
- }
- public async void RequestData()
- {
- var tasks = new List<Task>();
- for(int i=0; i<FileNames.Length; i++)
- {
- var fileName = String.Concat("file #",(i+1).ToString());
- if(CheckFileName(fileName))
- {
- var task = LoadDataAsync(fileName).ContinueWith((t) =>
- {
- OnDataLoaded(this, t.Result);
- });
- tasks.Add(task);
- }
- else
- {
- var args = new DataEventArgs(fileName, new List<string>());
- OnDataNotFound?.Invoke(this, args);
- }
- }
- await Task.WhenAll(tasks);
- WriteLine("Request completed.");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement