使用 Linq to SQL 进行多线程处理

2024-02-08

由于原始线程 (使用 Linq to SQL 进行多线程处理 https://stackoverflow.com/questions/1815537)现在已经很老了,我想我应该就类似的主题发布另一个问题。考虑一个场景,其中 DomainService 公开了许多方法来从 SQL Server 数据库检索数据。显然,在多用户场景中,多个请求同时传入,人们必须期望 this.DataContext 能够并行使用,开发人员无需控制也无需付出额外的努力来处理这些多个请求。 那么为什么如果我将顺序 LINQ 查询放入 Parallel.Invoke() 中,一切都会崩溃,我会感到恐惧“已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。”错误 ...?

为了证明这一点,这是有效的:

List<Data> retVal = new List<Data>();

retVal.AddRange(this.DataContext.Table1.Where(w=>w.A==1).Select(s=>new Data{f1=s.D}).ToList());
retVal.AddRange(this.DataContext.Table1.Where(w=>w.B==2).Select(s=>new Data{f1=s.D}).ToList());
retVal.AddRange(this.DataContext.Table1.Where(w=>w.C==3).Select(s=>new Data{f1=s.D}).ToList());

...但这并没有:

List<Data> retVal = new List<Data>();
Parallel.Invoke(
()=>retVal.AddRange(this.DataContext.Table1.Where(w=>w.A==1).Select(s=>new Data{f1=s.D}).ToList()),
()=>retVal.AddRange(this.DataContext.Table1.Where(w=>w.B==2).Select(s=>new Data{f1=s.D}).ToList()),
()=>retVal.AddRange(this.DataContext.Table1.Where(w=>w.C==3).Select(s=>new Data{f1=s.D})).ToList());

暂时不用担心 List 不是线程安全的,因为错误来自 SQL 数据连接。

任何见解和解释将不胜感激。


首先,澄清一下,这个问题与多线程有关,而不是与多用户有关。在多用户场景中,每个用户都有自己的DataContext实例,避免共享实例周围的线程问题。

并行示例失败是因为DataContext不是线程安全对象;它希望由单个线程使用,而不是由多个线程并行使用。这是与数据读取器相关的一个例外,因为DataContext当您尝试并行执行第二条语句时,其连接已打开,并使用数据读取器进行读取。

如果您尝试使用一个,同样的问题会很明显SqlConnection跨多个线程的实例,无需任何序列化技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Linq to SQL 进行多线程处理 的相关文章

  • Sql Server:如何在 WHERE 子句中使用 MAX 等聚合函数

    我想获得该记录的最大值 请帮我 SELECT rest field1 FROM mastertable AS m INNER JOIN SELECT t1 field1 field1 t2 field2 FROM table1 AS T1
  • 表名搜索

    我使用以下命令在特定数据库的存储过程中搜索字符串 USE DBname SELECT Name FROM sys procedures WHERE OBJECT DEFINITION OBJECT ID LIKE xxx 修改上面的内容是否
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • java.sql.Timestamp 到微秒精度的字符串

    我正在将时间戳列从数据库读取到 java sql Timestamp 对象中 然后我想将时间戳的值转换为 String 对象 但保持微秒精度 调用 toString 方法让我接近 但它似乎在微秒内丢失了尾随零 如果时间戳以非零数字结尾 则一
  • 从表中删除孤儿

    我正在尝试清理一张有很多孤立项目的桌子 我通过查找空值来检查是否与另一个表存在关系来解决此问题 DELETE FROM table1 LEFT JOIN table2 ON table1 ID table2 ID WHERE table2
  • postgres 有 CLOSEST 运算符吗?

    我正在寻找这样的东西 给定一个表格 id number 1 7 2 1 25 3 1 01 4 3 0 查询SELECT FROM my table WHEREnumberCLOSEST 1 将返回第 3 行 我只关心数字 现在我有一个程序
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • SLURM 节点、任务、核心和 CPU

    有人能够澄清这些东西到底是什么吗 据我所知 节点是集群内的计算点 本质上是一台计算机 任务是可以在单个节点或多个节点上执行的进程 核心基本上是指您希望在单个节点上分配多少 CPU 来执行分配给该 CPU 的任务 它是否正确 我混淆了什么吗
  • 为什么 Spark 没有使用本地计算机上的所有核心

    当我在 Spark Shell 中或作为作业运行一些 Apache Spark 示例时 我无法在单台计算机上实现完全的核心利用率 例如 var textColumn sc textFile home someuser largefile t
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • SPARK SQL - 当时的情况

    我是 SPARK SQL 的新手 SPARK SQL 中是否有相当于 CASE WHEN CONDITION THEN 0 ELSE 1 END 的内容 select case when 1 1 then 1 else 0 end from
  • 根据表sql中的行替换字符串中的字符

    我需要用一些映射的字符替换字符串中的字符列表 我有一个表 dbo CharacterMappings 有 2 列 CharacterToFilter 和 ReplacementCharacter 假设这个表中有3条记录 Filter Rep
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo
  • 在 Java 中并行处理两个任务

    我想在一个方法中调用8个方法 这8个方法中的2个方法是一个洞任务 其余6个方法是另一个洞任务 我想同时并行处理这两个任务 据我所知 我可以用线程来做到这一点 但说实话 要么我看不到与我的目标相似的示例 要么即使我看到了我也无法理解该示例 您
  • 如何在使用连接池时强制 SqlConnection 物理关闭?

    我明白 如果我实例化一个 SqlConnection 对象 我实际上是从连接池中获取一个连接 当我调用 Open 时 它将打开连接 如果我对该 SqlConnection 对象调用 Close 或 Dispose 方法 它将返回到连接池 但
  • 是否有适用于所有数据库的标准sql

    如下所示 不同数据库的语法有所不同 是否存在适用于所有数据库的标准方法 有没有什么工具可以将任意sql转换为任意sql SQL Server 2005 CREATE TABLE Table01 Field01 int primary key
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N

随机推荐

  • TCP握手可靠性

    我其实想知道 在 TCP 握手中 为什么客户端需要 ack 返回来完成握手 在syn和syn ack之后 双方都有足够的信息来启动数据 tcp仍然要求客户端的ack移动到已建立的状态 问题是 为什么这种三向握手是实现可靠性的必要和充分条件
  • 下划线覆盖 NSAttributedString 中的文本

    我正在尝试创建一个属性字符串 但下划线覆盖了我的文本 而不是出现在它后面 有没有办法来解决这个问题 我正在使用以下代码 let paragraphStyle NSMutableParagraphStyle paragraphStyle li
  • 将 IP 地址输入 EC2 安全组规则时应使用什么格式?

    我正在尝试配置从堡垒主机 位于公共子网中 到同一 VPC 中的私有 linux 实例 位于私有子网中 的安全 ssh 连接 当我为我的私有 Linux 实例添加安全组规则时 最初它显示的规则为 请注意 在添加堡垒主机的 IP 地址之前 水印
  • CSS居中技巧[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Jquery 选择元[property=og:image]?

    我想在 Jquery 中选择网页中的主照片 我只有 url 页面 所以我决定使用为 Facebook 共享编写的元 我想选择的内容 元属性 og 图像 内容 http blablabla jpg 我写了这个 但它不起作用 meta prop
  • 在状态数组中添加值的最佳方法是什么

    我有一个状态数组 比方说this state arr 我想向这个状态属性添加一些内容 然后更改更多属性 Option 1 onChange event this state arr push newvalue this setState s
  • 使用 jQuery 将自定义 CSS 类添加到动态创建的元素

    让我说明一下我的问题 我有一个外部 JavaScript 库 它可以根据用户输入和交互动态地为我创建某些 HTML 元素 并且我希望编写一个脚本来自动将某个类添加到这些动态创建的元素中 假设我也无法编辑我正在使用的外部 JavaScript
  • 你可以在 Swift 字符串插值中使用字符串/字符文字吗?

    是否可以在 Swift 中的字符串插值中使用字符串 字符文字 语言参考说 在内插字符串的括号内编写的表达式不能包含未转义的双引号 这对我来说有点模糊 因为它似乎故意留下转义双引号的漏洞 如果我尝试 println Output repeat
  • 我试图编写一个包含二次公式的程序,但我不明白为什么我不断收到错误[重复]

    这个问题在这里已经有答案了 import math a float input Enter value for a b float input Enter value for b c float input Enter value for
  • 创建新的 Hibernate 表

    所以我对 Hibernate 还很陌生 而且我正在开发一个大型应用程序 该应用程序已经有一个包含多个 Hibernate 表的数据库 我正在开发一项新功能 其中包括一个新功能 Entity类 我需要将这些对象存储在一个新表中 该类声明如下
  • 如何在Jenkins中使用ANSIcolor插件?

    我已经为 Jenkins 安装了 ANSI color 插件 在作业中 我已使用默认配置文件 xterm 激活了该插件 我不知道打印到控制台日志时如何对控制台日志的输出进行着色 来自批处理文件的日志 Windows 平台 有关的文档 htt
  • 作为 OpenShift 用户,我可以做什么?

    我目前正在使用虚拟服务器并想尝试一下开放式班次 http openshift redhat com 出去 但我还没有真正了解它是如何工作的 我可以获得我的 网络空间 的 root 访问权限吗 我可以设置服务器操作系统 例如 Debian 7
  • 当从 Java 查询时,Sql Server 会忽略 varchar 列上的索引并进行表扫描

    问题 我有一个 SQL Server 表 其中有一个 varchar 列和数百万行 它已建立索引 从 SQL Server 查询工具中运行查询速度很快 因为它使用索引 当我从 Java JDBCPreparedStatement 运行查询时
  • Django 验证单元测试

    我试图模拟 django contrib auth 验证方法的返回值 该方法在视图的登录方法中调用 有view py代码 def login request if request method POST username get usern
  • 如何更改 Mac OS X 启动板中显示的 Java 应用程序名称

    当我的申请写成Java with SWT运行在OS X 都从下Eclipse和来自jar 它在启动板中的名称为 java 如图所示 在我的代码的开头我调用Display setAppName MyApp 并且菜单栏和菜单项中的应用程序名称是
  • PhoneGap 3.1.0 没有节点/npm 和命令行工具

    是否可以在没有节点包的情况下下载和使用 PhoneGap 3 1 0 由于网络连接受到限制 从 git hub 命令行安装节点 PhoneGap 模块 Cordova 模块和插件很烦人 使用 PhoneGap 2 9 似乎是那么容易和简单
  • 错误:无法构建 gem 本机扩展

    gem install unf ext v 0 0 6 localhost workflow boyun ryan007 gem install unf ext v 0 0 6 Building native extensions This
  • AVMutableComposition 输出冻结在第一个视频的最后一帧

    我正在尝试使用 AVMutableCompositions 将多个剪辑 视频 合并为一个 我已经成功完成了这一操作以及旋转和翻译每条指令 但是 仍然存在一个问题 当第一个剪辑完成时 输出冻结在最后一帧 第一个剪辑的最后一帧 仅当有另一个剪辑
  • 使用 VBA 声明相对于活动单元格的范围

    我需要声明一个相对于活动单元格的范围对象 问题是 每次宏运行时我想要选择的行数和列数都不同 例如 我有两个变量 numRows and numCols 我想选择一个范围 其左上角有 ActiveCell 单元格的行为 ActiveCell
  • 使用 Linq to SQL 进行多线程处理

    由于原始线程 使用 Linq to SQL 进行多线程处理 https stackoverflow com questions 1815537 现在已经很老了 我想我应该就类似的主题发布另一个问题 考虑一个场景 其中 DomainServi