Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
        public async void FetchAsyncWithMultipleEntries()
        {
            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(async() =>
                    {
                        var res = await cache.GetOrCreateAsync($"key2-{i}", entry => Task.FromResult(i));
                        Assert.Equal(i, res);
                    }));
                }
                await Task.WhenAll(tasks);
            }
        }