【发布时间】:2015-05-09 01:12:32
【问题描述】:
我有一个带有标题的 CSV 文件。每行代表必须完成的涉及 HTTP 请求和处理数据的工作。
我需要使这个多线程,以便工作得更快,但我不确定 DataTable 是否适合这个。
我的流程是:
- 将 CSV 加载到 DataTable
- 调度程序函数将任务排队,为每个任务分配一个 DataTable 行号(我将限制并发任务的数量)
- 每个任务将只读取分配给它们的 DataTable 行。完成工作,然后相应地更新 DataTable 行并完成。
- 在操作结束或收到取消令牌时,DataTable 将被序列化回 CSV 文件。
只有 1 个任务会访问单个行,但多个任务将同时访问分配给它们的行。
这可能会给我带来问题吗?
由于没有两个任务会访问同一个 DataTable 行,是否有必要在 Task 每次读取或写入其 DataTable 行之前锁定 DataTable?
【问题讨论】:
-
为什么你不能去异步读取 csv?您可以快速阅读以获取 csv 的长度,然后只需启动多个任务,阅读 csv - 执行他们的任务并完成。为什么需要一个只读数据表来存储与 csv 相同的信息?
-
我不确定你的意思。 DataTable 不是只读的。每个任务都将读取它们分配的 DataTable 行,做一些事情然后更新 DataTable 中的那一行。然后,DataTable 在进程结束时被序列化回 CSV。
-
好吧,你还没有完全解释清楚——我以为它只是保存了关于任务做什么的信息
-
听起来您正在尝试将 CSV 用作数据库。你为什么要这样做而不是仅仅使用数据库?
-
我以 CSV 文件的形式提供输入,并且必须更新此 CSV 文件。更新后的 CSV 文件是最终目标,也是我必须生成的格式。
标签: c# multithreading asynchronous datatable