Example #1
0
        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());
        }
Example #2
0
        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);
            }
        }