using System.Threading.Tasks;
using Microsoft.Extensions.Caching.Memory;
static async Task Main(string[] args)
var memoryCache = new MemoryCache(new MemoryCacheOptions());
var guidKey1 = Guid.NewGuid().ToString();
var guidKey2 = Guid.NewGuid().ToString();
Console.WriteLine($"Guid key 1: {guidKey1}");
Console.WriteLine($"Guid key 2: {guidKey2}");
var firstRequestTask = FetchAndWriteToConsole(memoryCache, guidKey1, 10);
var secondRequestTask = FetchAndWriteToConsole(memoryCache, guidKey2);
var cacheRequestTask = FetchAndWriteToConsole(memoryCache, guidKey2);
await Task.WhenAll(firstRequestTask, secondRequestTask, cacheRequestTask)
private async static Task FetchAndWriteToConsole(MemoryCache memoryCache, string key, int delayInSeconds = 0)
var cacheEntry = await memoryCache.GetOrCreateAsync<string>(key, async entry =>
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5);
return await Task.Run(() =>
return ($"Cached Value for GUID {key}");
}).ConfigureAwait(false);
}).ConfigureAwait(false);
Console.WriteLine($"Cache Entry for {key}: {cacheEntry}");