示例#1
0
        private static async Task RunWaitStopJob(PollingJob pollingJob, PollingFunction polllingFunc)
        {
            pollingJob.Start(polllingFunc);
            await Task.Delay(TimeSpan.FromSeconds(1));

            pollingJob.Stop();
        }
示例#2
0
        public void Stop()
        {
            JobStarted = false;
            JobStoped  = true;

            m_pollingFunc = null;
        }
示例#3
0
        public void Start(PollingFunction func)
        {
            m_pollingFunc = func;

            JobStarted = true;
            JobStoped  = false;
        }
示例#4
0
        public void Start(PollingFunction func)
        {
            Require.NotNull(func, "func");

            m_cts         = new CancellationTokenSource();
            m_pollingTask = PollingCycle(m_timeout, func, m_cts.Token);
        }
示例#5
0
        public async Task StartedJob_WhenFuncThrows_IncreasesTimeout(
            [Frozen] Mock <IPollingTimeout> timeout,
            [Frozen] PollingFunction pollingFunc,
            PollingJob pollingJob)
        {
            await RunWaitStopJob(pollingJob, pollingFunc);

            timeout.Verify(self => self.Increase(), Times.AtLeastOnce());
        }
示例#6
0
        public async Task StartedJob_WhenFuncReturnsFalse_Waits(
            [Frozen] Mock <IPollingTimeout> timeout,
            [Frozen] PollingFunction pollingFunc,
            PollingJob pollingJob)
        {
            await RunWaitStopJob(pollingJob, pollingFunc);

            timeout.Verify(self => self.WaitAsync(It.IsAny <CancellationToken>()), Times.AtLeastOnce());
        }
示例#7
0
        public async Task StartedJob_WhenFuncReturnsTrue_ResetsTimeout(
            [Frozen] Mock <IPollingTimeout> timeout,
            [Frozen] PollingFunction pollingFunc,
            PollingJob pollingJob)
        {
            await RunWaitStopJob(pollingJob, pollingFunc);

            timeout.Verify(self => self.Reset(), Times.AtLeastOnce());
        }
示例#8
0
        private async Task PollingCycle(IPollingTimeout timeout, PollingFunction func, CancellationToken token)
        {
            await Task.Yield();

            while (!token.IsCancellationRequested)
            {
                if (await func(token).ContinueWith(OnJobFunctionCompleted))
                {
                    timeout.Reset();
                    await timeout.WaitAsync(token);
                }
                else
                {
                    await timeout.WaitAsync(token);

                    timeout.Increase();
                }
            }
        }