public void Should_not_stop_when_action_throws_OperationCanceledException_with_unknown_token() { var counter = 0; Task Action() { counter++; throw new OperationCanceledException(new CancellationToken(true)); } var periodicalAction = new AsyncPeriodicalAction( Action, errorHandler, () => TimeSpan.Zero); periodicalAction.Start(); var spinWait = new SpinWait(); while (counter < 2) { spinWait.SpinOnce(); } periodicalAction.Stop(); errors.Should().BeGreaterThan(1); }
public void Should_stop_when_wait_first_delay() { var canStop = false; var calls = 0; TimeSpan Provider() { canStop = true; return(TimeSpan.FromSeconds(100500)); } var periodicalAction = new AsyncPeriodicalAction( () => { ++calls; throw new Exception(); }, errorHandler, Provider, true); periodicalAction.Start(); var spinWait = new SpinWait(); while (!canStop) { spinWait.SpinOnce(); } periodicalAction.Stop(); calls.Should().Be(0); errors.Should().Be(0); }
public void Should_not_stop_when_action_throws_exception() { var counter = 0; Task Action() { counter++; return(Task.FromException(new Exception())); } var periodicalAction = new AsyncPeriodicalAction( Action, errorHandler, () => TimeSpan.Zero); periodicalAction.Start(); var spinWait = new SpinWait(); while (counter < 2) { spinWait.SpinOnce(); } periodicalAction.Stop(); errors.Should().BeGreaterThan(1); }
private void StartDaemons(ISettingsProvider settingsProvider) { _dump = new AsyncPeriodicalAction( async() => { if (!Directory.Exists(Path.GetDirectoryName(settingsProvider.StorageSettings.WeaponIndexPath))) { Directory.CreateDirectory(settingsProvider.StorageSettings.WeaponIndexPath); } await File.WriteAllTextAsync(settingsProvider.StorageSettings.WeaponIndexPath, _itemByName.ToJson()); }, exception => _log.Error(exception, "Can't dump index"), () => settingsProvider.StorageSettings.IndexDumpPeriod); _cleanup = new PeriodicalAction(() => { foreach (var pair in _itemByName.ToArray()) { if (pair.Value.ExpireAt <= DateTime.UtcNow) { _itemByName.TryRemove(pair.Key, out _); } } }, exception => _log.Error(exception, "can't cleanup"), () => _settingsProvider.StorageSettings.WeaponStorageCleanupPeriod ); _dump.Start(); _cleanup.Start(); }
public void Initialize() { _currentState = ReadFromSnapshotAndOpLog(); _periodicalSnapshot = new AsyncPeriodicalAction(async() => await MakeStateSnapshot(), exception => _log.Error(exception, "Can't snapshot"), () => 5.Seconds()); _periodicalSnapshot.Start(); }
public VictimIndex(ISettingsProvider settingsProvider, ILog log) { Initialize(settingsProvider); _dump = new AsyncPeriodicalAction( async() => { await File.WriteAllTextAsync(settingsProvider.ApplicationSettings.QueuePath, _victims.ToJson()); }, exception => log.Error(exception, "Can't dump index"), () => settingsProvider.ApplicationSettings.DumpPeriod); _dump.Start(); }
public ReusableFileSystemWatcher(string path, string filter, FileSystemEventHandler eventHandler) { folder = new DirectoryInfo(path); lastSeenCreationTime = folder.CreationTime; this.filter = filter; this.eventHandler = eventHandler; currentWatcher = TryCreateWatcher(); periodicalChecker = new AsyncPeriodicalAction(RecreateWatcherIfNeeded, exception => {}, () => CheckPeriod, true); periodicalChecker.Start(); }
public void Should_stop_when_action_throws_OperationCanceledException_with_proper_token() { var canStop = false; Task Action(CancellationToken token, TimeSpan remaining) { canStop = true; var actionSpinWait = new SpinWait(); while (!token.IsCancellationRequested) { actionSpinWait.SpinOnce(); } token.ThrowIfCancellationRequested(); return(Task.CompletedTask); } var periodicalAction = new AsyncPeriodicalAction( Action, errorHandler, () => TimeSpan.Zero); periodicalAction.Start(); var spinWait = new SpinWait(); while (!canStop) { spinWait.SpinOnce(); } periodicalAction.Stop(); errors.Should().Be(0); }