代码之家  ›  专栏  ›  技术社区  ›  Nix

Async=true和实体框架

  •  4
  • Nix  · 技术社区  · 14 年前

    这是一个由两部分组成的问题。

    最近我们遇到了一个周期性崩溃的问题,例外是:

    从服务器接收结果时发生传输级别错误(提供程序:TCP提供程序,错误:0-指定的网络名称不再可用

    第二个问题是有人建议在实体框架连接字符串中设置“async=true”。我觉得这只是启用了异步api。当你使用EF的时候,这有什么用吗?切换这个标志对EF生成的查询有什么影响吗?

    1 回复  |  直到 14 年前
        1
  •  6
  •   Nix    14 年前

    首先,我将关于“async=true”对实体框架的影响的问题发布到 MS

    我们的问题:

    与环境有关。有些事情导致数据库运行稍微慢了一点,但这暗示了一个更大的问题。显然,当您在线程之间共享上下文时,EF遇到了可怕的问题(这不是一个容易解决的问题),因此我们看到了一个打开连接的竞争条件。

    我们基本上有一个“只读上下文”,它只得到。我们的问题是两个线程试图同时打开连接,一个线程成功,另一个线程失败,导致以下异常的一些变化:

    连接未关闭。连接的当前状态为“正在连接”。

    这个问题的后半部分是async=true做什么。说到EF,它让我们的系统崩溃了。我们有一个执行连接的代码块,如果async=true和MARS=false,我们得到:

    已存在与此命令关联的打开的DataReader,必须先关闭它

    一旦我们削减开支 MARS ,禁用了异步,一切又恢复了。