public IObservable <Unit> Invalidate(string key) { lock (memoizedRequests) { if (disposed) { return(Observable.Throw <Unit>(new ObjectDisposedException("PersistentBlobCache"))); } this.Log().Debug("Invalidating {0}", key); memoizedRequests.Invalidate(key); } CacheIndexEntry dontcare; CacheIndex.TryRemove(key, out dontcare); var path = GetPathForKey(key); var ret = Observable.Defer(() => filesystem.Delete(path)) .Catch <Unit, FileNotFoundException>(_ => Observable.Return(Unit.Default)) .Catch <Unit, IsolatedStorageException>(_ => Observable.Return(Unit.Default)) .Retry(2) .Do(_ => actionTaken.OnNext(Unit.Default)); return(ret.Multicast(new AsyncSubject <Unit>()).PermaRef()); }
public void Invalidate(string key) { if (disposed) { throw new ObjectDisposedException("PersistentBlobCache"); } Action deleteMe; lock (MemoizedRequests) { log.Debug("Invalidating {0}", key); MemoizedRequests.Invalidate(key); CacheIndexEntry dontcare; CacheIndex.TryRemove(key, out dontcare); var path = GetPathForKey(key); deleteMe = () => { try { filesystem.Delete(path); } catch (FileNotFoundException ex) { log.Warn(ex); } catch (IsolatedStorageException ex) { log.Warn(ex); } actionTaken.OnNext(Unit.Default); }; } try { deleteMe.Retry(1); } catch (Exception ex) { log.Warn("Really can't delete key: " + key, ex); } }