有没有办法找到哪些Tasks在同一个DbContext上运行导致错误?

问题描述 投票:0回答:1

我在使用EF Core时遇到了一个错误,我的一些调用使用了相同的dbContext,并且得到了一个类似于 "Error with Multiple Tasks Running Concurrently on Same DbContext "的错误,但是由于代码库的大小,我很难判断代码的哪些部分导致了这个错误。有什么好的方法可以调试这种类型的错误吗?我试着寻找没有被等待的代码,但无济于事。任何帮助都是非常感激的。

c# entity-framework .net-core
1个回答
2
投票

有什么好办法可以调试这种类型的错误吗?

我不知道有什么简单的解决方法,没有。

我试着找过没有等待的代码,但是没有用。

这种错误通常是由三种情况之一引起的。

  • 异步代码没有被等待。
  • 对DbContext实例有一个不正确的作用域,以至于Dependency Injection系统最后在你意想不到的时候共享了实例。
  • 做异步并发的代码,例如: 。Task.WhenAll,当每个并发任务共享同一个DbContext的时候。

0
投票

这就是为什么EF提供了 async API,它同步调用,所以它们不会在需要的时候同时运行。只要把每一个非async 呼叫 async 版本,你的问题就会消失。

你的具体问题的答案是,"所有的"。

© www.soinside.com 2019 - 2024. All rights reserved.