public async Task Should_allow_reconfiguration_at_runtime() { var currentCount = 0; var maxCount = 0; ICommandRouter dynamicRouter = new CommandRouter(); IPipe <InputContext> pipe = Pipe.New <InputContext>(cfg => { cfg.UseConcurrencyLimit(1, dynamicRouter); cfg.UseExecuteAsync(async cxt => { var current = Interlocked.Increment(ref currentCount); while (current > maxCount) { Interlocked.CompareExchange(ref maxCount, current, maxCount); } await Task.Delay(10); Interlocked.Decrement(ref currentCount); }); }); await dynamicRouter.SendCommand <SetConcurrencyLimit>(new { ConcurrencyLimit = 32 }); var context = new InputContext("Hello"); Task[] tasks = Enumerable.Range(0, 500) .Select(index => Task.Run(async() => await pipe.Send(context))) .ToArray(); await Task.WhenAll(tasks); Assert.That(maxCount, Is.EqualTo(32)); }