怪物奇妙物语

宇宙无敌超级美少男的怪物奇妙物语

首页 新随笔 联系 管理
  819 随笔 :: 0 文章 :: 2 评论 :: 16万 阅读

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;
}
posted on   超级无敌美少男战士  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示