Expiração do .Net Cache

No meu projeto, usamos serviços da Web para obter dados do banco de dados e preencher os dados dos serviços da Web para o cache. Estou usando a expiração absoluta e a duração é definida como 4 horas. Portanto, após 4 horas, o cache expira e, portanto, o serviço da Web é chamado para preencher os dados no cache.

O problema que está acontecendo agora é:

Às vezes, há um problema ao estabelecer conexão entre serviços da Web e banco de dados e, portanto, os serviços da Web não retornam dados.

Nesse caso, o cache é preenchido com valores nulos para todos os campos e até 4 horas de cache (até o tempo em que expira novamente), ele não é preenchido novamente.

Estou procurando 2 tipos de soluções: 1) poderíamos renovar o cache antes que ele expire e, em seguida, chamar o serviço da web. Se o serviço da web recuperar os dados, sobrescreva o cache. 2) o cache nunca expira e, de vez em quando, geramos um thread que atualiza o cache, se recebermos os dados de volta.

Mas não tenho certeza de como implementar as soluções acima? Alguém pode me dar uma visão da parte técnica? Obrigado pela ajuda!

Meu código atual de preenchimento de cache:

ctx.Cache.Insert("cachename", cacheValue, null,
              DateTime.Now.AddHours(Int32.Parse(siteViewModel.ApplicationSettings["CacheDurationHours"])), System.Web.Caching.Cache.NoSlidingExpiration, 
             System.Web.Caching.CacheItemPriority.Default,
             null
             );

questionAnswers(1)

yourAnswerToTheQuestion