【问题标题】:Is there a way to find which Tasks are running on the same DbContext causing errors?有没有办法找到哪些任务在同一个 DbContext 上运行导致错误?
【发布时间】:2020-05-06 03:31:29
【问题描述】:

我在使用 EF Core 时遇到了一个错误,其中我的一些调用使用相同的 dbContext,并且收到一个错误,指出“多个任务在同一 DbContext 上同时运行时出错”,但由于代码库的大小我很难说出代码的哪些部分导致了这个错误。有没有调试此类错误的好方法?我尝试寻找未等待的代码,但无济于事。非常感谢任何帮助。

【问题讨论】:

    标签: c# entity-framework .net-core


    【解决方案1】:

    有没有调试此类错误的好方法?

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

    我已尝试寻找未等待的代码,但无济于事。

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

    • 未等待的异步代码。
    • DbContext 实例的范围不正确,因此依赖注入系统最终会在您不期望的情况下共享实例。
    • 当每个并发任务共享相同的 DbContext 时,执行异步并发的代码,例如 Task.WhenAll

    【讨论】:

    • 感谢您的回复。
    【解决方案2】:

    这就是 EF 提供 async API 的原因,它会同步调用,因此它们不会根据需要同时运行。只需将每个非async 调用替换为async 版本,您的问题就会消失。

    您的具体问题的答案是“全部”。

    【讨论】:

    • 感谢您的回复
    猜你喜欢
    • 2010-12-05
    • 2020-05-17
    • 2017-10-29
    • 2011-03-30
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多