Пример #1
0
        public async Task ItDoesNotDelayScheduledTaskPromotionWhenRunningLongTasks()
        {
            var waitTime = 4000;

            var taskQueue  = TaskQueueTestFixture.UniqueRedisTaskQueue();
            var taskClient = new TaskClient(taskQueue);

            var semaphoreFile = Path.GetTempFileName();

            File.Delete(semaphoreFile);
            File.Exists(semaphoreFile).Should().BeFalse();

            await taskClient.TaskQueue.Enqueue(() => Wait(waitTime));

            await taskClient.TaskScheduler.AddScheduledTask(
                () => TaskQueueTestFixture.WriteSemaphore(semaphoreFile),
                TimeSpan.FromMilliseconds(waitTime / 4));

            var task = Task.Run(async() => await taskClient.Listen());

            await Task.Delay(waitTime / 2);

            // Ensure we did not run the scheduled task
            File.Exists(semaphoreFile).Should().BeFalse();

            var dequeuedScheduledTask = await taskQueue.Dequeue();

            File.Exists(semaphoreFile).Should().BeFalse();
            dequeuedScheduledTask.Should().NotBeNull();
            dequeuedScheduledTask.MethodName.Should().Be(nameof(TaskQueueTestFixture.WriteSemaphore));

            taskClient.CancelListen();
            await task;
        }
Пример #2
0
        public void ItContinuesListeningWhenATaskThrowsAnException()
        {
            var waitTime = 5000;

            var taskClient    = new TaskClient(TaskQueue.Redis("localhost:6379", nameof(ItContinuesListeningWhenATaskThrowsAnException)));
            var semaphoreFile = Path.GetTempFileName();

            taskClient.TaskQueue.Enqueue(() => Throw());
            taskClient.TaskQueue.Enqueue(() => TaskQueueTestFixture.WriteSempaphore(semaphoreFile));

            var task = Task.Run(() => taskClient.Listen());

            Thread.Sleep(waitTime);

            taskClient.CancelListen();
            task.Wait();

            TaskQueueTestFixture.EnsureSemaphore(semaphoreFile);
        }
Пример #3
0
        public async Task ItExecutesImmediateAndScheduledTasksInOrder()
        {
            const int immediateTasks = 5;
            const int scheduledTasks = 20;

            const int scheduledTasksStart     = -100;
            const int scheduledTasksIncrement = 50;

            var taskQueue  = TaskQueueTestFixture.UniqueRedisTaskQueue();
            var taskClient = new TaskClient(taskQueue);

            var semaphoreFile = Path.GetTempFileName();

            File.Delete(semaphoreFile);
            File.Exists(semaphoreFile).Should().BeFalse();

            for (var i = 0; i < immediateTasks; ++i)
            {
                await taskClient.TaskQueue.Enqueue(() =>
                                                   TaskQueueTestFixture.WriteSemaphoreValue(semaphoreFile, (i + 1).ToString()));
            }

            for (var i = 0; i < scheduledTasks; ++i)
            {
                await taskClient.TaskScheduler.AddScheduledTask(
                    () => TaskQueueTestFixture.WriteSemaphoreValue(semaphoreFile, (immediateTasks + i + 1).ToString()),
                    TimeSpan.FromMilliseconds(scheduledTasksStart + (scheduledTasksIncrement *i)));
            }

            var task = Task.Run(async() => await taskClient.Listen());

            Thread.Sleep(scheduledTasks * scheduledTasksIncrement + 2000);

            var expectedFileContents = Enumerable
                                       .Range(1, immediateTasks + scheduledTasks)
                                       .Aggregate("", (acc, v) => acc + v.ToString());

            File.Exists(semaphoreFile).Should().BeTrue();
            File.ReadAllText(semaphoreFile).Should().Be(expectedFileContents);

            taskClient.CancelListen();
            await task;
        }
Пример #4
0
        public async Task ItContinuesListeningWhenATaskThrowsAnException()
        {
            var waitTime = 5000;

            var taskQueue     = TaskQueueTestFixture.UniqueRedisTaskQueue();
            var taskClient    = new TaskClient(taskQueue);
            var semaphoreFile = Path.GetTempFileName();

            await taskClient.TaskQueue.Enqueue(() => Throw());

            await taskClient.TaskQueue.Enqueue(() => TaskQueueTestFixture.WriteSemaphore(semaphoreFile));

            var task = Task.Run(async() => await taskClient.Listen());
            await Task.Delay(waitTime);

            taskClient.CancelListen();
            await task;

            TaskQueueTestFixture.EnsureSemaphore(semaphoreFile);
        }
Пример #5
0
        public void ItContinuesListeningWhenATaskThrowsAnException()
        {
            var waitTime = 5000;

            var taskClient = new TaskClient(
                TaskQueue.Redis(TaskQueueTestFixture.RedisConnectionString, nameof(ItContinuesListeningWhenATaskThrowsAnException)),
                restoreScheduleFromBackup: false);
            var semaphoreFile = Path.GetTempFileName();

            taskClient.TaskQueue.Enqueue(() => Throw());
            taskClient.TaskQueue.Enqueue(() => TaskQueueTestFixture.WriteSempaphore(semaphoreFile));

            var task = Task.Run(() => taskClient.Listen());

            Thread.Sleep(waitTime);

            taskClient.CancelListen();
            task.Wait();

            TaskQueueTestFixture.EnsureSemaphore(semaphoreFile);
        }