每个 ToListAsync 打开一个 DbContext 最终会阻塞连接池吗?

Tra*_*s J 5 c# asynchronous entity-framework

相关:EntityFramework(6)和异步(waitingForActivation)?

但是,它没有解决等待多个项目,只是一个。我的目标是沿着这些方向完成一些事情

var car = db.Cars.ToListAsync(); 
var people = db.People.ToListAsync(); 
Task.WhenAll(car,people);
Run Code Online (Sandbox Code Playgroud)

不幸的是我得到了这个运行时异常(我应该真的知道)

在前一个异步操作完成之前,在此上下文中启动了第二个操作。使用“await”确保在此上下文上调用另一个方法之前已完成任何异步操作。不保证任何实例成员都是线程安全的。

数据库上下文不是线程安全的。好的。所以现在我正在考虑将调用分解为方法,然后等待两个方法调用(或者一种简单的演示方法是将上面显示的每个 db 调用包装在using(db){}语句中)。无论如何,问题在于使用该模式时,每个ToListAsync.

每个 ToListAsync 调用使用 DbContext 是否会对连接池构成威胁?这是反模式吗?

Ree*_*sey 5

每个 ToListAsync 调用使用 DbContext 是否会对连接池构成威胁?

每个DbContext. 根据您的情况,这可能会超额订阅,也可能不会。这在很大程度上取决于预期的使用情况和数据库的功能。

这是反模式吗?

不必要。这给数据库带来了更多压力,因为它将同时执行两个查询。好处是您可能会增加客户端的吞吐量(在这种情况下,ASP.NET 是数据库的客户端),这可能会超过额外的压力。测量确实是了解收益是否超过 DB 压力的唯一方法。