private static async Task RunWaitStopJob(PollingJob pollingJob, PollingFunction polllingFunc) { pollingJob.Start(polllingFunc); await Task.Delay(TimeSpan.FromSeconds(1)); pollingJob.Stop(); }
public void Stop() { JobStarted = false; JobStoped = true; m_pollingFunc = null; }
public void Start(PollingFunction func) { m_pollingFunc = func; JobStarted = true; JobStoped = false; }
public void Start(PollingFunction func) { Require.NotNull(func, "func"); m_cts = new CancellationTokenSource(); m_pollingTask = PollingCycle(m_timeout, func, m_cts.Token); }
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()); }
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()); }
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()); }
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(); } } }