当前位置: 首页 > news >正文

.NET SqlSugar多线程下SqlSugarClient 的线程安全陷阱

使用SqlSugar读取Sqlite数据库,项目运行过程中间歇性抛出以下异常:

SqlSugar.SqlSugarException:“中文提示 : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:Connection was closed, statement was terminatedDbType="Sqlite";ConfigId="".
English Message : Connection open error . Connection was closed, statement was terminatedDbType="Sqlite";ConfigId="" ”

经定位,异常抛出位置在一个很普通的查询操作上:

public List<SqliteDiskEntity> GetDisksByPDiskId(string env, string project, int pDiskId)
{return _db.Queryable<SqliteDiskEntity>().Where(x => x.PDiskId == pDiskId).ToList();
}

连接字符串没有问题,数据库文件也正常存在,且异常并非每次必现,而是偶发性的。

排查过程

1. 排除连接字符串问题 

连接配置如下,看起来没有明显问题:

1 private static SqlSugarClient CreateClient(string dbPath)
2 {
3     return new SqlSugarClient(new ConnectionConfig
4     {
5         ConnectionString = $"Data Source={dbPath};Version=3;Journal Mode=Wal;BusyTimeout=5000;",
6         DbType = SqlSugar.DbType.Sqlite,
7         IsAutoCloseConnection = true,
8     });
9 }

已开启 WAL 模式、设置了 BusyTimeout、配置了 IsAutoCloseConnection = true,表面上不应该出问题。

2. 调试器线程分析 —— 发现并发访问

在 Visual Studio 中暂停调试,查看线程窗口时发现了关键线索:

线程 ID 当前位置
34996 DiskSubscribeTimer_Triggered(object, SubscribeTaskArgs)
30716 ExecuteSubscribeTask(SubscribeTaskArgs) → RunSubscribeTaskAsync()
38276 DiskSubscribeTimer_Triggered(object, SubscribeTaskArgs)

虽然代码中用 ConcurrentDictionary 防止了同一个磁盘的并发执行,但不同的订阅任务仍然会并行运行,共享同一个 _db 实例。

问题根因及解决

_db是SqlSugarClient实例,所以,

此实例不是线程安全的。 当多个线程同时通过同一个 SqlSugarClient 实例操作数据库时,内部的连接/命令对象会发生竞争,导致 SQLite 底层返回 SQLITE_MISUSE(即 bad parameter or other API misuse)。

整个调用链路如下:

image

这个错误的迷惑性在于:

  • 连接字符串完全正确
  • IsAutoCloseConnection = true 看似已经处理了连接释放
  • 异常只在多任务并发时偶发出现
  • 异常信息指向"连接错误",容易误导排查方向

将SqlSugarClient(非线程安全)改为SqlSugarScope(线程安全),即可

SqlSugarClient vs SqlSugarScope的区别,列个对比

image

 

http://www.jsqmd.com/news/439891/

相关文章:

  • 2026体育场地服务商推荐榜:塑胶跑道厂家/塑胶跑道实力厂家/塑胶跑道施工/塑胶跑道源头厂家/塑胶跑道生产厂家/选择指南 - 优质品牌商家
  • 2026年冷水机厂家推荐:基于多行业应用评价,针对稳定性与能效痛点精准指南 - 品牌推荐
  • 好用还专业!降AIGC软件 千笔 VS 文途AI 专科生首选
  • 2026年上海离婚律师推荐:涉外与本地婚姻法律需求全面评价与排名分析 - 品牌推荐
  • 2026国内靠谱彩色乒乓球企业排行,口碑好的都在这,训练乒乓球/训练球乒乓球/三星乒乓球正品,乒乓球企业推荐榜单 - 品牌推荐师
  • 喷墨印刷流量测量优选:高精准超声波流量传感器品牌推荐 - 品牌2026
  • 2026年上海离婚律师推荐:涉外与财产分割场景评价,解决情绪疏导与证据痛点 - 品牌推荐
  • 音视频开源项目:Seal顶级Android视频与音频下载器(几乎是全平台视频解析开源工具)
  • 适配涂覆工艺流量测量,2026超声波流量传感器品牌推荐 - 品牌2026
  • 2026年工控主板厂家推荐:基于多行业应用实测评价,针对兼容性与耐用性痛点精准指南 - 品牌推荐
  • 2026年冷水机厂家推荐:基于多行业应用评价,针对稳定性与能效痛点精准指南。 - 品牌推荐
  • 工业自动化领域流量测量优选:超声波流量计品牌推荐 - 品牌2026
  • 如何选择上海离婚律师?2026年上海离婚律师推荐与排名,直击谈判效率与成本痛点 - 品牌推荐
  • 2026年广东抗HPV生物蛋白敷料品牌推荐:广东长帆科技“梦之树”系列,专注高危HPV阳性转阴与黏膜修护全周期方案 - 品牌推荐官
  • 2026年冷水机厂家推荐:基于多行业应用评价针对稳定性与能效痛点精准指南。 - 品牌推荐
  • 2026年冷水机厂家推荐:智能制造趋势评测,涵盖化工与食品加工场景核心痛点 - 品牌推荐
  • 从高精度时间基准刚需到稳健增长:全球原子钟2026-2032年CAGR5.3%,2032年达4.86亿美元
  • 如何选择上海离婚律师?2026年上海离婚律师推荐与排名,直击谈判与取证痛点 - 品牌推荐
  • 科创人工智能ETF汇添富(589560.SH):AI赛道持续发力,重仓股表现分化
  • 乐山特色鳝丝美食店铺推荐榜:乐山鳝丝哪家好吃、乐山鳝丝店、乐山鳝丝推荐、乐山鳝丝本地人推荐、好吃的乐山鳝丝店选择指南 - 优质品牌商家
  • 2026年2月工控主板厂家推荐:基于技术适配与行业深耕维度的专业榜单 - 品牌推荐
  • 准考证自助查询下载系统制作教程(小程序实现)
  • 2026年度工控主板厂家推荐榜单:技术深度与场景适配双维度评估的行业洞察 - 品牌推荐
  • 2026年加拿大移民中介推荐榜单:专业积淀与合规服务双维度评估的行业洞察。 - 品牌推荐
  • Google CTF 2022 Quals Hardware 8051 Pwn: Weather
  • 2026年2月工控一体机厂家推荐榜:五大服务商综合评估报告发布 - 品牌推荐
  • leetcode2875. 无限数组的最短子数组(有个long long的老问题要注意)
  • 适配超纯水工况流量测量:2026高精度超声波流量传感器品牌推荐 - 品牌2026
  • 智能合约安全革命:重入攻击防御的五大黄金法则与代码实战
  • 数据污染注入:软件测试从业者的AI防御战备手册