相关:EntityFramework (6) and async (waitingForActivation)?每个ToListAsync打开DbContext最终会阻塞连接池吗?
但是,它没有解决等待多个项目,只有一个。我的目标是继续沿着这条
var car = db.Cars.ToListAsync();
var people = db.People.ToListAsync();
Task.WhenAll(car,people);
有所建树不幸的是,我得到这个运行时异常(我应该真正知道)
开始在这个背景下,以前的异步操作完成之前第二次手术。在调用此上下文中的另一个方法之前,请使用'await'来确保任何异步操作已完成。任何实例成员不保证是线程安全的。
数据库上下文不是线程安全的。好的。因此,现在我正在考虑将调用分解为方法,然后等待两个方法调用(或者一个简单的演示方法,就是将上面显示的每个db调用打包到using(db){}
声明中)。无论如何,问题在于使用该模式时,每个ToListAsync
需要一个新的DbContext。
对每个ToListAsync调用使用DbContext会对连接池造成威胁吗?这是反模式吗?
它不会对线程池造成威胁,因为它不使用线程池,而是使用IO完成端口。你当然会有更多的数据库连接,如果数据库已经很忙,你的数据库可能无法更快地处理这个问题。 –
@KrisVandermotten - **连接**游泳池。当前连接到数据库的数量。我没有在这里提到线程池:) –
的确,我的错误。你当然会有更多的连接,每个DbContect有效。尽管如此,它们都将被收集起来以备后用。 –