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)); } }
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); } }