c# – 异步/等待和缓存
发布时间:2020-12-15 06:55:28 所属栏目:百科 来源:网络整理
导读:我的服务层正在缓存大量的Db请求到memcached,这是不是可以使用Async / Await?例如我如何等待这个? public virtual Store GetStoreByUsername(string username){ return _cacheManager.Get(string.Format("Cache_Key_{0}",username),() = { return _storeRe
我的服务层正在缓存大量的Db请求到memcached,这是不是可以使用Async / Await?例如我如何等待这个?
public virtual Store GetStoreByUsername(string username) { return _cacheManager.Get(string.Format("Cache_Key_{0}",username),() => { return _storeRepository.GetSingle(x => x.UserName == username); }); } 注意:如果密钥存在于缓存中,它将返回“存储”(而不是任务< Store>),如果该高速缓存中不存在该键,则它将执行该lambda.如果我将Func更改为 return await _storeRepository.GetSingleAsync(x => x.UserName == username); 和方法签名 public virtual async Task<Store> GetStoreByUsername(string username) 由于缓存返回类型,这将无法正常工作. 解决方法
它看起来像缓存管理器做所有的“检查它存在,如果不运行lambda然后存储”.如果是这样,使异步操作的唯一方法是具有一个GetAsync方法,该方法返回一个Task< Store>而不是商店,即
public virtual Task<Store> GetStoreByUsernameAsync(string username) { return _cacheManager.GetAsync(string.Format("Cache_Key_{0}",() => { return _storeRepository.GetSingleAsync(x => x.UserName == username); }); } 请注意,这不需要标记为异步,因为我们没有使用等待.然后,缓存管理器将执行以下操作: public async Task<Store> GetAsync(string key,Func<Task<Store>> func) { var val = cache.Get(key); if(val == null) { val = await func().ConfigureAwait(false); cache.Set(key,val); } return val; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |