public async Task InvalidateCache(int productId, int userId) { string key = "user:"******"|product" + "|productId:" + productId; await _cacheStorage.DeleteAsync(key); // Delete all cache entries for this user var invalidateCalls = new List <Task>(); var keys = _cacheStorage.ListKeys(); if (keys != null && keys.Count > 0) { foreach (var k in keys) { var parts = k.Split('|'); if (parts != null && parts.Length > 0) { var userPart = parts[0].Split(':'); if (userPart != null && userPart.Length > 1) { if (userPart[1] == userId.ToString()) { invalidateCalls.Add(_cacheStorage.DeleteAsync(k)); // this deletes all cache entries for this user } } } } } await Task.WhenAll(invalidateCalls); }