5

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

但是,它并没有解决等待多个项目,只是一个。我的目标是按照这些思路完成一些事情

var car = db.Cars.ToListAsync(); 
var people = db.People.ToListAsync(); 
Task.WhenAll(car,people);

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

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

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

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

4

1 回答 1

5

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

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

这是反模式吗?

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

于 2013-10-31T18:16:46.177 回答