public static async Task RunParallelPassiveConsumerAsync( IConnection conn, MyWorkerContext ctx, int agentCount ) { var agentList = new List <ConsumingAgent>(); try { Console.WriteLine($"Sub ({agentCount}) start {ctx.Subject}"); ctx.CronoStart(); var listeners = new Task[agentCount]; for (int i = 0; i < agentCount; i++) { var agent = ConsumingAgent.CreatePassive(conn, ctx, null); agentList.Add(agent); listeners[i] = Task.Run(agent.PassiveWorkerAsync); } await Task.WhenAll(listeners); ctx.CronoStop(); Console.WriteLine($"Sub ({agentCount}) end {ctx.Subject}"); } finally { foreach (var agent in agentList) { agent.Dispose(); } } }
public static void RunParallelReactiveConsumer( Original.IConnection conn, MyWorkerContext ctx, int agentCount ) { var agentList = new List <ConsumingAgent>(); try { Console.WriteLine($"Sub ({agentCount}) start {ctx.Subject}"); ctx.CronoStart(); var cde = new CountdownEvent(agentCount); for (int i = 0; i < agentCount; i++) { var agent = ConsumingAgent.CreatePassive(conn, ctx, cde); agentList.Add(agent); ThreadPool.QueueUserWorkItem(agent.PassiveWorker); } cde.Wait(); ctx.CronoStop(); Console.WriteLine($"Sub ({agentCount}) end {ctx.Subject}"); } finally { foreach (var agent in agentList) { agent.Dispose(); } } }
private async Task ProducingWorkerAsync(MyWorkerContext ctx) { ClientOptions opts = ConnectionUtils.GetDefaultOptions(); ConnectionFactory cf = new ConnectionFactory(); using (IConnection conn = await cf.CreateConnectionAsync(opts, CancellationToken.None)) { Workers.RunPublisher(conn, ctx); } }
private async Task ConsumingWorkerAsync(MyWorkerContext ctx) { ClientOptions opts = ConnectionUtils.GetDefaultOptions(); ConnectionFactory cf = new ConnectionFactory(); using (IConnection conn = await cf.CreateConnectionAsync(opts, CancellationToken.None)) { await Workers.RunParallelPassiveConsumerAsync(conn, ctx, ConsumingAgentCount); //Workers.RunParallelReactiveConsumer(conn, ctx, ConsumingAgentCount); } }
public static ConsumingAgent CreateReactive( Original.IConnection conn, MyWorkerContext ctx, CountdownEvent cde ) { var instance = new ConsumingAgent(); instance._subReactive = conn.SubscribeAsync(ctx.Subject + ".>", instance.ReactiveHandler); instance._ctx = ctx; instance._cde = cde; return(instance); }
public static ConsumingAgent CreatePassive( IConnection conn, MyWorkerContext ctx, CountdownEvent cde ) { var instance = new ConsumingAgent(); instance._subPassive = conn.SubscribePassive(ctx.Subject + ".>"); instance._ctx = ctx; instance._cde = cde; return(instance); }
public static PublishingAgent Create( IConnection conn, MyWorkerContext ctx, CountdownEvent cde ) { var instance = new PublishingAgent(); instance._conn = conn; instance._ctx = ctx; instance._cde = cde; instance._buffer = new byte[1000 + (int)(ctx.Description.Length * 1.1)]; return(instance); }
public static void RunPublisher( Original.IConnection conn, MyWorkerContext ctx ) { Console.WriteLine("Pub start " + ctx.Subject); ctx.CronoStart(); var agent = PublishingAgent.Create(conn, ctx, null); agent.Worker(null); ctx.CronoStop(); Console.WriteLine($"Pub end {ctx.FormatStats(1)}"); }
public void Run() { Task consTask; { var ctx = new MyWorkerContext(Subject, Description, LoopCount); consTask = Task.Run(() => this.ConsumingWorkerAsync(ctx)); } Task prodTask; { var ctx = new MyWorkerContext(Subject, Description, LoopCount); prodTask = Task.Run(() => this.ProducingWorkerAsync(ctx)); } prodTask.Wait(); consTask.Wait(); }
public void Run() { var consThread = new Thread(this.ConsumingWorker); { var ctx = new MyWorkerContext(Subject, Description, LoopCount); consThread.Start(ctx); } var prodThread = new Thread(this.ProducingWorker); { var ctx = new MyWorkerContext(Subject, Description, LoopCount); prodThread.Start(ctx); } prodThread.Join(); consThread.Join(); }
public WorkerController(MyWorkerContext context) { _context = context; }