我的服务层将许多数据库请求缓存到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”(而不是Task<Store>
),如果缓存中不存在该键,则执行lambda表达式。如果我将Func更改为return await _storeRepository.GetSingleAsync(x => x.UserName == username);
方法签名为:
public virtual async Task<Store> GetStoreByUsername(string username)
显然,这无法工作是因为缓存返回类型不允许。
ConcurrentDictionary<string,object>
和lock(obj){...}
代替SemaphoreSlim
呢?我进行了一些基准测试,似乎在我的情况下locks
更快。 - eddyP23SemaphoreSlim
,因为它提供了异步的等待方法。而在锁语句的主体中是无法使用await
的。 - Brandon_keyLocks
将保留引用。 - zihotki