예제 #1
0
        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));
            }
        }
예제 #2
0
        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);
        }