public void ScheduleRefresh(DurableCacheRefreshEvent refreshEvent) { var timer = new Timer { AutoReset = true, Interval = refreshEvent.RefreshTime.TotalMilliseconds, }; timer.Elapsed += (s, e) => { _handler.Handle(refreshEvent); if (refreshEvent.UtcLifetime <= DateTime.UtcNow.Add(refreshEvent.RefreshTime)) { timer.Stop(); } }; timer.Start(); if (!_timers.TryAdd(Guid.NewGuid(), timer)) { Trace.TraceWarning("Unable to add timer to dictionary for key {0}", refreshEvent.Key); } ; }
public void Handle(DurableCacheRefreshEvent refreshEvent) { try { var cache = string.IsNullOrWhiteSpace(refreshEvent.CacheName) ? _container.Resolve<ICache>() : _container.Resolve<ICache>(refreshEvent.CacheName); var bypassKey = refreshEvent.Method.DeclaringType.FullName + ".Intercept.Bypass"; if (!_container.IsRegistered(refreshEvent.Method.Interface, bypassKey)) { //Wont work in the case of a custom factory or custom constructors _container.RegisterType(refreshEvent.Method.Interface, refreshEvent.Method.DeclaringType, bypassKey); } var obj = _container.Resolve(refreshEvent.Method.Interface, bypassKey); var method = refreshEvent.Method.GetMethod(); var value = method.Invoke(obj, refreshEvent.Parameters); if (method.IsGenericTask()) { var task = Task.Run(async () => { await (dynamic)typeof(CacheExtensions).GetMethod("AddToCacheAsync") .MakeGenericMethod(method.GetReturnType()) .Invoke(null, new object[] {cache, value, refreshEvent.Key, refreshEvent.UtcLifetime}); }); task.Wait(); } else { typeof(CacheExtensions).GetMethod("AddToCache") .MakeGenericMethod(method.GetReturnType()) .Invoke(null, new object[] {cache, value, refreshEvent.Key, refreshEvent.UtcLifetime}); } } catch (Exception ex) { Trace.TraceError("Unable to refresh cache for key {0}. Reason: {1}", refreshEvent.Key, ex.Message); } }
public void ScheduleRefresh(DurableCacheRefreshEvent refreshEvent) { var timer = new Timer { AutoReset = true, Interval = refreshEvent.RefreshTime.TotalMilliseconds, }; timer.Elapsed += (s, e) => { _handler.Handle(refreshEvent); if (refreshEvent.UtcLifetime <= DateTime.UtcNow.Add(refreshEvent.RefreshTime)) { timer.Stop(); } }; timer.Start(); if (!_timers.TryAdd(Guid.NewGuid(), timer)) { Trace.TraceWarning("Unable to add timer to dictionary for key {0}", refreshEvent.Key); }; }