public async Task Scheduler_WhenTaskExceptionOccurs_ShouldContinueToRun()
        {
            using (var scheduler = new SystemTimerScheduledTaskManager())
            {
                var task = new TestBackgroundTask(5, 1);

                scheduler.Configure(new[] { task }, CancellationToken.None);

                try
                {
                    await task.Completion;
                }
                catch (OperationCanceledException)
                {
                    Assert.False(true);
                }

                Assert.Equal(5, task.Counter);
            }
        }
        public void ShouldContinueToRunEvenThoughExceptionsOccurs()
        {
            using (var reset = new ManualResetEventSlim(false))
                using (var scheduler = new SystemTimerScheduledTaskManager())
                {
                    var task = new TestBackgroundTask()
                    {
                        ExecutionDelay       = TimeSpan.FromMilliseconds(10),
                        ExecuteDuringStartup = false,
                        Reset            = reset,
                        Interval         = TimeSpan.FromMilliseconds(20),
                        ThrowsExceptions = true
                    };

                    scheduler.Configure(new List <IUnleashScheduledTask>()
                    {
                        task
                    }, CancellationToken.None);
                    reset.Wait();

                    task.Counter.Should().Be(5);
                }
        }
        public void ShouldBeStoppedWhenCancelled()
        {
            using (var reset = new ManualResetEventSlim(false))
                using (var cts = new CancellationTokenSource())
                    using (var scheduler = new SystemTimerScheduledTaskManager())
                    {
                        cts.CancelAfter(75);

                        var task = new TestBackgroundTask()
                        {
                            ExecutionDelay = TimeSpan.FromMilliseconds(10),
                            Reset          = reset,
                            Interval       = TimeSpan.FromMilliseconds(10),
                        };

                        scheduler.Configure(new List <IUnleashScheduledTask>()
                        {
                            task
                        }, cts.Token);
                        reset.Wait(TimeSpan.FromMilliseconds(200));

                        task.Counter.Should().BeInRange(2, 4);
                    }
        }