Example #1
0
        public void Cancel_JobsCancelledBeforeRunning_JobInCanceledStatus()
        {
            var job = new LambdaJob(() => { });

            job.Cancel();
            job.Start().Wait();

            Assert.AreEqual(JobStatus.Cancelled, job.Status);
        }
Example #2
0
        public void Dispose_JobDoNotHandleCancellationToken_JobIsSuccessfullyCompleted()
        {
            var job = new LambdaJob(() => { Thread.Sleep(100); });

            _jobManager.PushForExecution(job);

            Thread.Sleep(10);
            _jobManager.Dispose();

            Assert.AreEqual(JobStatus.Success, job.Status);
        }
Example #3
0
        private static LambdaJob[] CreateJobs(int count, Action <int, CancellationToken> internalAction)
        {
            var jobs = new LambdaJob[count];

            for (var i = 0; i < count; i++)
            {
                var index = i;
                jobs[i] = new LambdaJob(token => { internalAction(index, token); });
            }

            return(jobs);
        }
Example #4
0
        private void WaitForCompletion()
        {
            var awaiter = new AutoResetEvent(false);
            var lastJob = new LambdaJob(() => { });

            lastJob.StatusChanged += (_, args) =>
            {
                if (args.Status.IsCompleted())
                {
                    awaiter.Set();
                }
            };

            _jobManager.PushForExecution(lastJob);
            awaiter.WaitOne();
        }
Example #5
0
        public void Cancel_JobIgnoresCancellationToken_JobInSuccessStatus()
        {
            var job = new LambdaJob(() => { Thread.Sleep(100); });

            job.StatusChanged += (sender, args) =>
            {
                if (args.Status == JobStatus.InProgress)
                {
                    job.Cancel();
                }
            };

            job.Start().Wait();

            Assert.AreEqual(JobStatus.Success, job.Status);
        }
Example #6
0
        public void Dispose_OneJobRunningOthersPending_ActiveJobCompletedOthersCancelled()
        {
            var activeJob   = new LambdaJob(() => { Thread.Sleep(100); });
            var pendingJobs = CreateJobs(10, (_, __) => { });

            _jobManager.PushForExecution(activeJob);

            foreach (var job in pendingJobs)
            {
                _jobManager.PushForExecution(job);
            }

            Thread.Sleep(10);
            _jobManager.Dispose();

            Assert.AreEqual(JobStatus.Success, activeJob.Status);
            Assert.IsTrue(pendingJobs.All(job => job.Status == JobStatus.Cancelled));
        }
Example #7
0
        private static LambdaJob <T>[] CreateJobs <T>(int count, Func <T> internalAction, Action onCompleted)
        {
            var jobs = new LambdaJob <T> [count];

            for (var i = 0; i < count; i++)
            {
                var job = new LambdaJob <T>(internalAction);
                job.StatusChanged += (_, args) =>
                {
                    if (args.Status.IsCompleted())
                    {
                        onCompleted();
                    }
                };
                jobs[i] = job;
            }

            return(jobs);
        }
Example #8
0
        public void Cancel_JobHandlesCancellationToken_JobInCancelledStatus()
        {
            var job = new LambdaJob <int>(token =>
            {
                token.ThrowIfCancellationRequested();

                return(0);
            });

            job.StatusChanged += (sender, args) =>
            {
                if (args.Status == JobStatus.InProgress)
                {
                    job.Cancel();
                }
            };

            job.Start().Wait();

            Assert.AreEqual(JobStatus.Cancelled, job.Status);
        }