【问题标题】:Is it safe to mutate an instance of SqlCommand immately after a call to Execute*Async?在调用 Execute*Async 之后立即改变 SqlCommand 的实例是否安全?
【发布时间】:2020-05-27 08:41:20
【问题描述】:

在不修改要运行的查询的情况下修改SqlCommand 何时保存?

例如,当我有

SqlCommand cmd = getCommand();
con.executeNonQueryAsync();
//later
modifyParameters(cmd);

被执行的 NonQuery 是否有可能看到修改后的参数?如果有,在返回任务完成之前是否有任何同步选项,之后修改命令保证不修改run语句?

【问题讨论】:

  • 你为什么要这样做?
  • is there any synchronization option - 是的,await con.executeNonQueryAsync();
  • 为现有连接创建新的 sql 命令可能是所有操作中最轻量级的操作。相反,对同一连接同时有几个未完成的请求可能很容易成为问题。我不认为 SqlConnection 支持它,如果支持,它可能是通过serialized execution 模拟的。
  • @Martijn 并且它不能 =) 您是否对代码进行了基准测试以确保创建多个命令是实际瓶颈?如果是,则安全选项是在完成后拥有一个SqlCommand 池以供重复使用。

标签: c# sqlcommand


【解决方案1】:

不,您不能在任何时候安全地修改 SqlCommand,而对命令的某些 Execute*Async 操作中的 Task 尚未完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多