public async Task LongRunningCacheTest_NoRefresh_InstantGet() { MemoryCacheWrapper memoryCache = new MemoryCacheWrapper(new MemoryCache(new MemoryCacheOptions())); Mock <IDatabaseCache> databaseCache = new Mock <IDatabaseCache>(); LongRunningCache <int> longRunningCache = new LongRunningCache <int>(memoryCache, databaseCache.Object, TimeSpan.FromSeconds(2)); Debug.WriteLine("Starting..."); var result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.immediateValueGetter()); Debug.WriteLine(result.State); Assert.IsTrue(result.State == CachedValueState.Updating); await Task.Delay(1000); result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.immediateValueGetter()); Debug.WriteLine(result.State); Assert.IsTrue(result.State == CachedValueState.FoundAndNotUpdating); await Task.Delay(3000); result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.immediateValueGetter()); Debug.WriteLine("#3: " + result.State); Assert.IsTrue(result.State == CachedValueState.Updating); result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.immediateValueGetter()); await Task.Delay(500); Debug.WriteLine("#4: " + result.State); Assert.IsTrue(result.State == CachedValueState.FoundAndNotUpdating); }
public async Task LongRunningCacheTest_WithRefresh_WaitingGet() { MemoryCacheWrapper memoryCache = new MemoryCacheWrapper(new MemoryCache(new MemoryCacheOptions())); Mock <IDatabaseCache> databaseCache = new Mock <IDatabaseCache>(); LongRunningCache <int> longRunningCache = new LongRunningCache <int>(memoryCache, databaseCache.Object, TimeSpan.FromSeconds(6), TimeSpan.FromSeconds(3)); DateTime startTime = DateTime.Now; Debug.WriteLine("Starting..."); var result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500)); Debug.WriteLine("0.00: " + result.State); Assert.IsTrue(result.State == CachedValueState.Updating); await Task.Delay(250); result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500)); Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State); Assert.IsTrue(result.State == CachedValueState.Updating); await Task.Delay(1000); result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500)); Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State); Assert.IsTrue(result.State == CachedValueState.FoundAndNotUpdating); await Task.Delay(3000); result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500)); Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State); Assert.IsTrue(result.State == CachedValueState.FoundButUpdating); await Task.Delay(1000); result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500)); Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State); Assert.IsTrue(result.State == CachedValueState.FoundAndNotUpdating); await Task.Delay(10000); result = await longRunningCache.GetOrRefreshCachedValueAsync("testKey", this.testRunner(), this.waitingValueGetter(500)); Debug.WriteLine((DateTime.Now - startTime).TotalMilliseconds + ": " + result.State); Assert.IsTrue(result.State == CachedValueState.Updating); }
public GuildStatsRetriever( ICache memoryCache, IDatabaseCache databaseCache, IBackgroundTaskQueue taskQueue, IMailSender mailSender, ICommonValuesProvider commonValues, IMailGenerator mailGenerator) { this.longRunningCache = new LongRunningCache <IEnumerable <GuildMemberStats> >(memoryCache, databaseCache, TimeSpan.FromDays(3), TimeSpan.FromDays(1)); this.taskQueue = taskQueue; this.mailSender = mailSender; this.commonValues = commonValues; this.mailGenerator = mailGenerator; }