我正在尝试使我的通用基础存储库全部异步并且我有代码:
public IEnumerable<T> GetAll()
{
return _dbContext.Set<T>();
}
public IQueryable<T> GetQueryable()
{
return _dbContext.Set<T>();
}
既然没有SetAsync
之类的方法,我该如何让这些方法异步呢?
最佳答案
对于返回数据的方法,您可以将它们设为异步:
public IAsyncEnumerable<T> GetAll()
{
return _dbContext.Set<T>().AsAsyncEnumerable();
}
或
public async Task<IList<T>> GetAll()
{
return await _dbContext.Set<T>().ToListAsync();
}
但是您不希望此方法是异步的。
public IQueryable<T> GetQueryable()
{
return _dbContext.Set<T>();
}
因为它不返回数据或执行数据库访问。它只是给调用者一个 stub 查询来使用。所以调用者会运行一个异步查询,如:
var orders = await customerRepo.GetQueryable().Where( o => o.CustomerId = 123 ).ToListAsync();
关于c# - 如何使 IEnumerable 和 IQueryable 异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66258812/