c# - 如何使 IEnumerable 和 IQueryable 异步?

我正在尝试使我的通用基础存储库全部异步并且我有代码:

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();

https://stackoverflow.com/questions/66258812/

相关文章:

json - 未处理的异常 : type '_InternalLinkedHashMap

haskell - 为什么 map 使用的这个函数需要返回一个(单例)列表而不是一个元素?

python - 如何使用函数跳出 for 循环?

awk - 如何在 Awk 中使用单个正则表达式提取多个字符串

c++ - 为什么需要 std::make_unique 来初始化成员 std::unique 数组

python - python中列表列表之间的叉积

javascript - Axios 响应未定义

google-cloud-platform - 如何查看 Google Cloud Function

flutter - 如何根据 flutter 中的文本高度调整容器高度?

list - 理解实现 foldr 和 foldl 的函数