public TValue Find(TKey key) => dic.Write(d => { if (key == null) { return(default(TValue)); } if (d.ContainsKey(key)) { return(d[key].Value); } var res = new MemoryKeyValueRepositoryValue <TValue>(); try { res.Value = _origin.Get(key); res.HasOrigin = true; } catch { res.Value = default(TValue); res.HasOrigin = false; } d.Add(key, res); return(res.Value); });
public TValue Get(TKey key) => dic.Write(d => { if (d.ContainsKey(key)) { return(d[key].Value); } var res = new MemoryKeyValueRepositoryValue <TValue>(); try { res.Value = _origin.Get(key); res.HasOrigin = true; return(res.Value); } catch { res.Value = default(TValue); res.HasOrigin = false; throw; } finally { d.Add(key, res); } });
public async Task <TValue> GetAsync(TKey key) { if (dic.ContainsKey(key)) { return(dic[key].Value); } var res = new MemoryKeyValueRepositoryValue <TValue>(); try { res.Value = await _origin.GetAsync(key); res.HasOrigin = true; return(res.Value); } catch { res.Value = default(TValue); res.HasOrigin = false; throw; } finally { dic.Add(key, res); } }
public Task SetAsync(TKey key, TValue value) { if (dic.ContainsKey(key)) { dic[key].Value = value; } else { dic[key] = new MemoryKeyValueRepositoryValue <TValue> { HasOrigin = true, Value = value } }; return(_origin.SetAsync(key, value)); }
public void Set(TKey key, TValue value) { if (dic.ContainsKey(key)) { dic[key].Value = value; } else { dic[key] = new MemoryKeyValueRepositoryValue <TValue> { HasOrigin = true, Value = value } }; _origin.Set(key, value); } }
public Task <TValue> FindAsync(TKey key) => dic.WriteAsync(async d => { if (d.ContainsKey(key)) { return(d[key].Value); } var res = new MemoryKeyValueRepositoryValue <TValue>(); try { res.Value = await _origin.GetAsync(key); res.HasOrigin = true; } catch { res.Value = default(TValue); res.HasOrigin = false; } d.Add(key, res); return(res.Value); });
public bool Exist(TKey key) { if (dic.ContainsKey(key)) { return(dic[key].HasOrigin); } var res = new MemoryKeyValueRepositoryValue <TValue>(); try { res.Value = _origin.Get(key); res.HasOrigin = true; } catch { res.Value = default(TValue); res.HasOrigin = false; } dic.Add(key, res); return(res.HasOrigin); }