private static int RunMain() { try { var pluginObject = new PluginObject(); Task.WaitAll( Task.Run(() => InitPlugins(LoadPlugins(), pluginObject)) .ContinueWith(_ => InitMessengers(LoadMessengers(), pluginObject)) ); Console.ReadKey(); return(0); } catch (Exception ex) { Console.WriteLine(ex); Console.WriteLine("\nPress and key to exit."); Console.ReadKey(); return(1); } }
private static async Task InitPlugins(Task <IPlugin[]> plugins, PluginObject pluginObject) { Guard.AgainstNull(nameof(plugins), plugins); Guard.AgainstNull(nameof(pluginObject), pluginObject); await Task.Run(() => { try { var options = new ParallelOptions { MaxDegreeOfParallelism = 1 }; Parallel.ForEach(plugins.Result, options, plugin => { plugin.Initialize(pluginObject); plugin.Execute(); }); } catch (AggregateException e) { foreach (var ie in e.InnerExceptions) { Console.WriteLine(ie.ToString()); } } }); }
private static async Task InitMessengers(Task <IPipelineMessenger[]> messengers, PluginObject pluginObject) { Guard.AgainstNull(nameof(messengers), messengers); Guard.AgainstNull(nameof(pluginObject), pluginObject); void OnMessageRecived(byte[] body, Dictionary <string, string> context) { var message = new PipelineMessage { Id = context[WidgetConst.PMSG_ID], Source = context[WidgetConst.PMSG_SOURCE], Content = Encoding.UTF8.GetString(body), Targets = new List <string> { context[WidgetConst.PMSG_JOBID] }, }; pluginObject.ReceiveMessage(message); } await Task.Run(() => { try { var options = new ParallelOptions { MaxDegreeOfParallelism = 1 }; Parallel.ForEach(messengers.Result, options, messenger => { messenger.OnMessageReceived += OnMessageRecived; messenger.Initialize(Logger); }); } catch (AggregateException e) { foreach (var ie in e.InnerExceptions) { Console.WriteLine(ie.ToString()); } } }); }