public static IObservable <KeyValuePair <string, T> > GetAndTouchObservable <T>(this IBucket bucket, string key, TimeSpan expiration) { return(Observable.FromAsync(() => bucket.GetAndTouchAsync <T>(key, expiration)) .Where(p => p.Status != ResponseStatus.KeyNotFound) .Select(p => { CheckResultForError(p); return new KeyValuePair <string, T>(key, p.Value); })); }