static async Task Main(string[] args) { await Logger.Log("Start program"); await Logger.Log("Load Configuration"); IConfigurationFactory configurationFactory = new ConfigurationFactory(); ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(configurationFactory); var a = configurationBuilder.GetConfiguration().Map(configuration => { Task.Run(async() => { await Logger.Log("successfully loaded configuration!"); await Logger.Log("Load and start scheduler"); ISchedulerFactory schedulerFactory = new CustomSchedulerFactory <SchedulerJob>("job1", "group1", "trigger1", configuration); await schedulerFactory.RunScheduler(); await Logger.Log("App is in running state!"); }); return(Task.Delay(-1)); }).ValueOr(() => Task.CompletedTask); await Task.WhenAll(a); Environment.Exit(1); }
static async Task Main(string[] args) { Log.Logger = BuildLoggerConfiguration.Build(); _logger = Log.Logger.ForContext <Program>(); _logger.Information("starting app"); IConfigurationFactory configurationFactory = new ConfigurationFactory(); var startupObjectOpt = await new ConfigurationBuilder(configurationFactory).GetConfigurationAsync(); var mainTask = startupObjectOpt.Map(configuration => { var sw = Stopwatch.StartNew(); _logger.Information("Build up the scheduler"); try { Task.Run(async() => { ISchedulerFactory currentWeatherSchedulerFactory = new CustomSchedulerFactory <CurrentWeatherSchedulerJob>("currentWeatherJob", "currentWeatherGroup", "currentWeatherTrigger", 10, configuration.RunsEvery, configuration); ISchedulerFactory airPollutionSchedulerFactory = new CustomSchedulerFactory <AirPollutionSchedulerJob>("airPollutionJob", "airPollutionGroup", "airPollutionTrigger", 15, configuration.AirPollutionRunsEvery, configuration); await currentWeatherSchedulerFactory.RunScheduler(); await airPollutionSchedulerFactory.RunScheduler(); _logger.Information("App is in running state!"); }); return(Task.Delay(-1)); } finally { sw.Stop(); _logger.Information("Processed {MethodName} in {ElapsedMs:000} ms", "Main", sw.ElapsedMilliseconds); } }).ValueOr(() => Task.CompletedTask); await Task.WhenAll(mainTask); Environment.Exit(1); }