/// <summary> /// This method is called when a transaction event occurs. /// </summary> /// <param name="transactionEvent">The transaction event</param> void ITransactionEventNotification.OnTransactionEvent(TransactionEventNotificationArgs transactionEvent) { switch (transactionEvent.EventType) { case TransactionEventType.Commit: ICache <TKey, TValue> cache; // Remove the cache from the list of caches _privateCaches.TryRemove(transactionEvent.Transactionid, out cache); // If there was a private cache, then commit it to the public cache if (cache != null) { var publicCache = GetPublicCache(); foreach (var kvp in cache) { TKey key = kvp.Key; TValue value = kvp.Value; Add(key, value, publicCache, false); } } break; case TransactionEventType.Rollback: // Remove the transaction specific data. _privateCaches.TryRemove(transactionEvent.Transactionid, out cache); break; } }
/// <summary> /// </summary> /// <param name="transactionEvent"></param> void ITransactionEventNotification.OnTransactionEvent(TransactionEventNotificationArgs transactionEvent) { lock ( _syncRoot ) { switch (transactionEvent.EventType) { case TransactionEventType.Commit: // Remove the cache from the list of caches HashSet <string> cache; if (_cachedItems.TryGetValue(transactionEvent.Transactionid, out cache)) { _cachedItems.Remove(transactionEvent.Transactionid); // Commit all the data from the transaction specific cache // to the default cache. foreach (string s in cache) { HashSet <string> defaultCache = GetCache(true); defaultCache.Add(s); } } break; case TransactionEventType.Rollback: _cachedItems.Remove(transactionEvent.Transactionid); break; } } }