예제 #1
0
        private async Task RunUpdate(K key, UpdateableInMemoryCacheEntry <V> entry)
        {
            var newEntry = await entry.Update(entry.Element, _clock).ConfigureAwait(false);

            if (_cache.TryUpdate(key, entry, entry))
            {
                _updatedEntries.OnNext(new KeyValuePair <K, V>(key, newEntry.Element));
            }
        }
예제 #2
0
        public void Set(K key, V value, Func <CacheEntry <V>, DateTimeOffset, Task <bool> > invalidation, Func <V, Task <V> > update)
        {
            var kvp   = new KeyValuePair <K, V>(key, value);
            var entry = new UpdateableInMemoryCacheEntry <V>(value, _clock.UtcNow, invalidation, update);

            if (_cache.TryAdd(key, entry))
            {
                _addedEntries.OnNext(kvp);
            }
            if (_cache.TryUpdate(key, entry, entry))
            {
                _updatedEntries.OnNext(kvp);
            }
        }