using System.Threading.Tasks;
using System.Globalization;
using CsvHelper.Configuration;
using System.Collections.Generic;
public static void Main()
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES");
StreamReader reader = new StreamReader(ExternalCSV.CreateAsync().Result.CSV);
var csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
List<Person> lstPerson = new List<Person>();
using (var csvReader = new CsvReader(reader, csvConfig))
Person person = new Person()
Index = csvReader.GetField(0),
UserId = csvReader.GetField(1),
FirstName = csvReader.GetField(2),
LastName = csvReader.GetField(3),
Sex = csvReader.GetField(4),
Email = csvReader.GetField(5),
Phone = csvReader.GetField(6),
DateOfbirth = csvReader.GetField(7),
JobTitle = csvReader.GetField(8)
foreach(Person person in lstPerson.Where(p => p.Sex == "Male").Take(3))
Console.WriteLine($"{person.FirstName} {person.LastName} is {person.JobTitle}");
public string Index { get; set; }
public string UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Sex { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string DateOfbirth { get; set; }
public string JobTitle { get; set; }
private set { _csv = value; }
private ExternalCSV() { }
public static async Task<ExternalCSV> CreateAsync()
ExternalCSV newInstanceExternalIP = new ExternalCSV();
await newInstanceExternalIP.InitializeAsync();
return newInstanceExternalIP;
private async Task InitializeAsync() => _csv = await GetExternalCSVAsync();
public override string ToString()
StreamReader reader = new StreamReader(_csv);
return reader.ReadToEnd();
private static async Task<Stream> GetExternalCSVAsync()
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync
"https://media.githubusercontent.com/media/datablist/sample-csv-files/main/files/people/people-100.csv"
MyJobs job = new MyJobs();
response.EnsureSuccessStatusCode();
return (await response.Content.ReadAsStreamAsync());
public class MyJobs : IJob
public async Task Execute(IJobExecutionContext context)
switch (context.JobDetail.Key.ToString())
Console.WriteLine(string.Format("[{0}]: Aplicación iniciada!", DateTime.Now));
Console.WriteLine(string.Format("[{0}]: Hora de comer!", DateTime.Now));
Console.WriteLine(string.Format("[{0}]: La app esta UP!.", DateTime.Now));
IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
IJobDetail appStartJob = JobBuilder.Create<MyJobs>()
.WithIdentity("arranqueApp", "app")
ITrigger appStartTrigger = TriggerBuilder.Create()
.WithIdentity("arranqueApp", "app")
await scheduler.ScheduleJob(appStartJob, appStartTrigger);
IJobDetail every24hJob = JobBuilder.Create<MyJobs>()
.WithIdentity("cada24h", "app")
ITrigger every24hTrigger = TriggerBuilder.Create()
.WithIdentity("cada24h", "app")
.StartAt(DateBuilder.DateOf(14, 00, 0))
.WithSimpleSchedule(s => s
await scheduler.ScheduleJob(every24hJob, every24hTrigger);
IJobDetail every10sJob = JobBuilder.Create<MyJobs>()
.WithIdentity("cada10s", "app")
ITrigger every10sTrigger = TriggerBuilder.Create()
.WithIdentity("cada10s", "app")
.WithSimpleSchedule(s => s
.WithIntervalInSeconds(10)
await scheduler.ScheduleJob(every10sJob, every10sTrigger);
catch (SchedulerException se)