考虑以下两个例子:
同步端点和repo调用不会将实体加载到内存中,因此返回IEnumerable<T>
:
myController的
[HttpGet]
public IHttpActionResult GetAll() {
IEnumerable<T> result = _repo.GetAll();
return Ok(result);
}
MyRepo
public IEnumerable<T> GetAll() {
return GetSet<T>(); // EF DbSet (IQueryable<T>)
}
异步控制器和repo调用将实体加载到内存中(虽然是异步的):
myController的
[HttpGet]
public async Task<IHttpActionResult> GetAll() {
List<T> result = await _repo.GetAll();
return Ok(result);
}
MyRepo
public Task<List<T>> GetAll() {
return GetSet<T>().ToListAsync(); // EF DbSet (Task<List<T>>)
}
首选方法是什么?到&#34;流&#34;结果或异步预加载结果?对我来说,似乎来自未知大小的数据库表/查询的任何形式的ToList
是一个不好的举动,我通常会避免它。但我也想获得async/await
的好处。目前,我的任何返回多个实体的repo方法都是非异步的,而其他方法则是异步的。