public async void FetchAsyncWithSingleEntry() { using (var memoryCache = new MemoryCache(new MemoryCacheOptions())) { var cache = new ConcurrentMemoryCache(memoryCache); var results = new List <int>(); var tasks = new List <Task <int> >(); for (var i = 0; i < 10; i++) { tasks.Add(Task.Run(() => cache.GetOrCreateAsync("key2", async entry => { await Task.Delay(100 - i * 5); return(i); }))); } await Task.WhenAll(tasks); for (int i = 0; i < tasks.Count; i++) { object res = await tasks[i]; results.Add((int)res); } var cachedItem = results[0]; Assert.All(results, res => Assert.Equal(cachedItem, res)); } }
public async void BenchmarkConcurrentFetchWithDifferentEntries() { var options = new MemoryCacheOptions() { SizeLimit = 200000 }; using (var memoryCache = new MemoryCache(options)) { var cache = new ConcurrentMemoryCache(memoryCache); var tasks = new List <Task>(); var timer = Stopwatch.StartNew(); for (var i = 0; i < 200000; i++) { tasks.Add(Task.Run(() => cache.GetOrCreateAsync <int>(Guid.NewGuid().ToString(), async entry => { entry.SetSize(1); await Task.Delay(400); return(i); }))); } await Task.WhenAll(tasks); timer.Stop(); Assert.True(timer.Elapsed.TotalMilliseconds < 10000); } }
public async void FetchWithMultipleEntries() { using (var memoryCache = new MemoryCache(new MemoryCacheOptions())) { var cache = new ConcurrentMemoryCache(memoryCache); var tasks = new List <Task>(); for (var i = 0; i < 10; i++) { tasks.Add(Task.Run(() => { var res = cache.GetOrCreate($"key1-{i}", entry => i); Assert.Equal(i, res); })); } await Task.WhenAll(tasks); } }
public async void FetchWithSingleEntry() { using (var memoryCache = new MemoryCache(new MemoryCacheOptions())) { var cache = new ConcurrentMemoryCache(memoryCache); var results = new List <int>(); var tasks = new List <Task>(); for (var i = 0; i < 10; i++) { tasks.Add(Task.Run(() => results.Add(cache.GetOrCreate <int>("key1", entry => i)))); } await Task.WhenAll(tasks); var cachedItem = results[0]; Assert.All(results, res => Assert.Equal(cachedItem, res)); } }
public void It_works() { var memoryCache = new MemoryCache(new MemoryCacheOptions()); var wrapper = new ConcurrentMemoryCache(memoryCache, 5 * 60); var counter = 0; var operations = new List <Action>(); for (var i = 0; i < 10000; ++i) { operations.Add(() => wrapper.GetOrCreate("ConcurrentMemoryCacheTests.It_works", () => counter += 1)); } Parallel.Invoke(operations.ToArray()); Assert.Equal(1, counter); }