private Task BeginReloading() { return(Task.Run(async() => { try { if (_instance.ReloadOnceImmediate) { await LoadSafe().ConfigureAwait(false); } while (!_token.IsCancellationRequested) { await Task.Delay(_profile.ReloadDelay(), _token); await LoadSafe().ConfigureAwait(false); } } catch (OperationCanceledException) { _logger.Warn($"({_cacheName}) scheduled reload is cancelled. No more reload will happen."); } catch (Exception e) { _logger.ErrorFormat($"({_cacheName}) scheduled reload error.", e); } }, _token)); }
public CacheScheduler(IReloadable reloadableInstance, IReloadConfigProfile profile, CancellationToken token, ILog logger, string cacheName) { reloadableInstance.ThrowIfNull($"{nameof(CacheScheduler)}.{nameof(reloadableInstance)}"); profile.ReloadDelay(); _localCts = new CancellationTokenSource(); _combinedCts = CancellationTokenSource.CreateLinkedTokenSource(token, _localCts.Token); _token = _combinedCts.Token; _instance = reloadableInstance; _profile = profile; _logger = logger; _cacheName = cacheName; _reloadTask = BeginReloading(); }