public List <CommandModel> PushMany <TCommand>(List <TCommand> commands) where TCommand : Command { _logger.Trace("Publishing {0} commands", commands.Count); lock (_commandQueue) { var commandModels = new List <CommandModel>(); var existingCommands = _commandQueue.QueuedOrStarted(); foreach (var command in commands) { var existing = existingCommands.FirstOrDefault(c => c.Name == command.Name && CommandEqualityComparer.Instance.Equals(c.Body, command)); if (existing != null) { continue; } var commandModel = new CommandModel { Name = command.Name, Body = command, QueuedAt = DateTime.UtcNow, Trigger = CommandTrigger.Unspecified, Priority = CommandPriority.Normal, Status = CommandStatus.Queued }; commandModels.Add(commandModel); } _repo.InsertMany(commandModels); foreach (var commandModel in commandModels) { _commandQueue.Add(commandModel); } return(commandModels); } }