コード例 #1
0
 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));
 }
コード例 #2
0
        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();
        }