DataTable 的线程安全问题
背景
虽然说一般只读不太会涉及到线程安全问题,
但是实际在编写代码的过程中发现data table即使是读取也是线程不安全的.
我的当时的代码是想要在多线中基于此data table创建一个data row,一开始以为是闭包的问题,
后来解决闭包问题之后,发现还有有问题,于是使用线程锁,最后总算才解决问题。
使用锁
- 使用锁机制:通过
lock
关键字来保护对DataTable
的访问。
private static readonly object _dataTableLock = new object(); // 修改 HandleLine 方法 static DataRow? HandleLine(string[] lines, List<int> idxList, DataTable dataTable, int lineIdx) { // ... 省略其他逻辑 ... if (lineIdx > 2) { // 👇👇👇👇👇👇👇 lock (_dataTableLock) { // 👇👇👇👇👇👇👇 DataRow newRow = dataTable.NewRow(); for (int i = 0; i < idxList.Count; i++) { if (i + 1 == idxList.Count) { newRow[i] = line.Substring(idxList[i]).Trim(); continue; } newRow[i] = line.Substring(idxList[i], idxList[i + 1] - idxList[i]).Trim(); } newRow["lineIdx"] = lineIdx; return newRow; } } return null; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验