最好返回任务<list <t>&gt;或IEnumerable <t>通过WebAPI端点?

时间:2016-09-17 20:11:31

标签: c# asynchronous asp.net-web-api async-await

考虑以下两个例子:

选项1

同步端点和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>)
}

选项2

异步控制器和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方法都是非异步的,而其他方法则是异步的。

0 个答案:

没有答案