Пример #1
0
        public void Test(int threads, int jobs)
        {
            IWorkerMonitor workerMonitor = new TestWorkerMonitor();
            IThreadFactory threadFactory = new DefaultThreadFactory();

            using (ManualResetEvent stopSignal = new ManualResetEvent(false))
            {
                using (JobQueue <Job> queue = new JobQueue <Job>("Worker queue", stopSignal))
                {
                    for (int i = 0; i < threads; i++)
                    {
                        TestWorker worker = new TestWorker(i.ToString(CultureInfo.InvariantCulture), queue, threadFactory, workerMonitor);
                        queue.AddWorker(worker);
                    }

                    queue.StartWorkers();

                    for (int i = 0; i < jobs; i++)
                    {
                        Job job = new Job("0");
                        queue.Enqueue(job);
                    }

                    Assert.IsTrue(queue.WaitForQueueToEmpty(TimeSpan.FromSeconds(10)));

                    queue.AssertAllThreadsAlive();

                    stopSignal.Set();

                    threadFactory.WaitForAllThreadsToStop(TimeSpan.FromSeconds(5));

                    Assert.IsTrue(queue.IsEmpty);
                }
            }
        }
Пример #2
0
        public void Start()
        {
            stopSignal = new ManualResetEvent(false);

            buildQueue = new JobQueue <ProjectRelatedJob>("Build queue", stopSignal);

            for (int i = 0; i < buildWorkersCount; i++)
            {
                BuildWorker worker = new BuildWorker(
                    string.Format(
                        CultureInfo.InvariantCulture,
                        "BuildWorker {0}",
                        i),
                    buildQueue,
                    threadFactory,
                    projectRegistry,
                    workerMonitor,
                    headlessLogger);
                buildQueue.AddWorker(worker);
            }

            buildQueue.StartWorkers();

            checkTriggersQueueFeeder = new CheckTriggersQueueFeeder(
                stopSignal,
                buildQueue,
                threadFactory,
                workerMonitor,
                projectRegistry);
            checkTriggersQueueFeeder.Start();
        }