public static void RunTopLevelTasks(int currentMinute, CancellationToken token) { List<EntityServer> servers = null; try { token.ThrowIfCancellationRequested(); servers = DbRepo.ListServersByMinute(currentMinute); Logit.LogInformation("Processing " + servers.Count.ToString() + " servers..."); } catch (Exception exc) { var errMsg = "Dispatcher Error: " + exc.Message; if (exc.InnerException != null) { errMsg += "-- " + exc.InnerException.Message; } Logit.LogError(new ApplicationException(errMsg)); } try { token.ThrowIfCancellationRequested(); var processor = new TaskProcessor(); var topLevelTasks = processor.GenerateTopLevelTasks(servers, token); Parallel.ForEach(topLevelTasks, topLevelResult => { }); Task.WaitAll(topLevelTasks.ToArray()); //needed to catch aggregate exceptions } catch (Exception exc) { Logit.LogError(exc); } }
/// <summary> /// MAIN /// </summary> /// <param name="args"></param> public static void Main(string[] args) { var startTime = DateTime.Now; var _tokenSource = new CancellationTokenSource(); Logit.LogInformation("CssDirector starting..."); CssDispatcher.RunTopLevelTasks(DateTime.Now.Minute, _tokenSource.Token); var elapsedTime = String.Format("{0:0.0}", (DateTime.Now - startTime).TotalMilliseconds / 1000); Logit.LogInformation("CssDirector finished in " + elapsedTime + " seconds."); Console.Write("Type any key to pause..."); if (ConsoleReadPauseWithTimeout(3)) { Console.Write("\nType any key to exit..."); Console.ReadKey(); } }