public void MultipleManagers() { using (var manager = TaskManagerFactory.Create(() => TestDbContext.Create(), new TaskManagerOptions() { MainLoopWait = 100 })) using (var manager2 = TaskManagerFactory.Create(() => TestDbContext.Create(), new TaskManagerOptions() { MainLoopWait = 100 })) using (var manager3 = TaskManagerFactory.Create(() => TestDbContext.Create(), new TaskManagerOptions() { MainLoopWait = 100 })) { var TOTAL_TASK_COUNT = 80; manager.StartListener(); manager2.StartListener(); manager3.StartListener(); Thread.Sleep(300); var guid = "2A71134F-AED4-47D5-AB3C-69B3EBC87C00"; manager.RegisterTaskType(typeof(MyTask), new TaskSettings(guid)); manager2.RegisterTaskType(typeof(MyTask), new TaskSettings(guid)); manager3.RegisterTaskType(typeof(MyTask), new TaskSettings(guid)); MyTask.TaskExecuted = 0; MyTask.elements = new List <int?>(); MyTask.duplicate = new List <int?>(); var taskIds = new List <int>(); for (int i = 0; i < TOTAL_TASK_COUNT; i++) { taskIds.Add(manager.EnqueueSingleTask <MyTask, int?>(i)); } using (var db = TestDbContext.Create()) { while (db.SingleTasks.Where(t => taskIds.Contains(t.Id)).Count(t => t.Status == SingleTaskStatus.Scheduled) > 0) { Thread.Sleep(333); } } Assert.True(manager.IsListenning); Assert.True(manager2.IsListenning); Assert.True(manager3.IsListenning); manager.StopListener(true); manager2.StopListener(true); manager3.StopListener(true); Assert.True(MyTask.TaskExecuted == TOTAL_TASK_COUNT); Assert.True(MyTask.elements.Count() == TOTAL_TASK_COUNT); Assert.True(MyTask.duplicate.Count() == 0); Assert.True(manager.TasksExecutedCount > 0); Assert.True(manager2.TasksExecutedCount > 0); Assert.True(manager3.TasksExecutedCount > 0); Console.AppendLine($"manager 1: {manager.TasksExecutedCount}"); Console.AppendLine($"manager 2: {manager2.TasksExecutedCount}"); Console.AppendLine($"manager 3: {manager3.TasksExecutedCount}"); Assert.Equal(TOTAL_TASK_COUNT, manager.TasksExecutedCount + manager2.TasksExecutedCount + manager3.TasksExecutedCount); } }