private async Task UpdateCacheValueAsync(FlagCacheEntry cacheEntry) { try { _logger.LogDebug("Updating cache for flag {0}.", cacheEntry.Key); var result = await _cloudTable.ExecuteAsync( TableOperation.Retrieve <DynamicTableEntity>("default", cacheEntry.Key) ); var value = ((DynamicTableEntity)result.Result).Properties["Value"]; cacheEntry.CompleteUpdate(value); } catch (Exception ex) { _logger.LogError(ex, "Failed to update cache value for flag {0}.", cacheEntry.Key); cacheEntry.FailUpdateAndRetryAt(DateTime.Now.AddMinutes(5)); } }
private EntityProperty?TryUpdateAndGetValue(FlagCacheEntry cacheEntry) { if (cacheEntry.NextUpdateRetryTime > DateTime.Now) { return(cacheEntry.Value); } var newUpdate = new Update(); var update = cacheEntry.GetOrStartUpdate(newUpdate); if (update == newUpdate) { update.Task = UpdateCacheValueAsync(cacheEntry); } update.Task?.Wait(100); return(cacheEntry.Value); }