BlueCollar.Worker.Start C# (CSharp) Méthode

Start() private méthode

private Start ( ) : bool
Résultat bool
        public bool Start()
        {
            if (this.disposed)
            {
                throw new ObjectDisposedException("Worker");
            }

            bool started = false;

            lock (this.statusLocker)
            {
                if (this.Status == WorkerStatus.Stopped)
                {
                    lock (this.runLocker)
                    {
                        this.runThread = new Thread(this.RunLoop);
                        this.runThread.Name = "BlueCollar Run Thread";
                        this.runThread.Start();
                    }

                    this.SetStatus(WorkerStatus.Working);

                    started = true;
                    this.logger.Info("Worker {0} ({1}) has started.", this.name, this.id);
                }
                else if (this.Status == WorkerStatus.Working)
                {
                    started = true;
                    this.logger.Info("Worker {0} ({1}) was already working.", this.name, this.id);
                }
                else
                {
                    this.logger.Info("Worker {0} ({1}) was not started because it is currently stopping.", this.name, this.id);
                }
            }

            return started;
        }

Usage Example

        public void WorkerDequeue()
        {
            IJob job = new TestJob() { Id = Guid.NewGuid() };
            SignalsRecord signals = new SignalsRecord() { QueueNames = "*", WorkerSignal = WorkerSignal.None, WorkingSignal = WorkingSignal.None };

            QueueRecord queued = new QueueRecord()
            {
                Id = 12,
                ApplicationName = BlueCollarSection.Section.ApplicationName,
                Data = JsonConvert.SerializeObject(job),
                JobName = job.Name,
                JobType = JobSerializer.GetTypeName(job.GetType()),
                QueuedOn = DateTime.UtcNow,
                QueueName = "*",
                TryNumber = 1
            };

            var transaction = new Mock<IDbTransaction>();

            var repository = new Mock<IRepository>();
            repository.Setup(r => r.BeginTransaction()).Returns(transaction.Object);
            repository.Setup(r => r.BeginTransaction(It.IsAny<IsolationLevel>())).Returns(transaction.Object);
            repository.Setup(r => r.GetQueued(It.IsAny<string>(), It.IsAny<QueueNameFilters>(), It.IsAny<DateTime>(), It.IsAny<IDbTransaction>())).Returns(queued);
            repository.Setup(r => r.GetWorkingSignals(It.IsAny<long>(), It.IsAny<long?>(), It.IsAny<IDbTransaction>())).Returns(signals);

            var factory = new Mock<IRepositoryFactory>();
            factory.Setup(f => f.Create()).Returns(repository.Object);

            var logger = new Mock<ILogger>();

            using (Worker worker = new Worker(BlueCollarSection.Section.ApplicationName, 1, "Test Worker", null, 1, false, factory.Object, logger.Object))
            {
                worker.Start();
                Thread.Sleep(1500);
            }

            repository.Verify(r => r.GetQueued(BlueCollarSection.Section.ApplicationName, It.IsAny<QueueNameFilters>(), It.IsAny<DateTime>(), It.IsAny<IDbTransaction>()));
            repository.Verify(r => r.DeleteQueued(12, It.IsAny<IDbTransaction>()));
            repository.Verify(r => r.CreateWorking(It.Is<WorkingRecord>(w => w.ApplicationName == BlueCollarSection.Section.ApplicationName && w.WorkerId == 1), It.IsAny<IDbTransaction>()));
        }
All Usage Examples Of BlueCollar.Worker::Start