DataTable不适合这种线程化操作吗?

Is DataTable unsuitable for this type of threaded operation?

我有一个 header 的 CSV 文件。每行代表必须完成的涉及 HTTP 请求和处理数据的工作。

我需要使它成为多线程的,这样可以更快地工作,但我不确定 DataTable 是否适合这个。

我的流程是:

  1. 将 CSV 加载到 DataTable
  2. 一个调度函数会queue个任务,为每个任务分配一个DataTable行号(我会限制并发任务的数量)
  3. 每个任务将只读取分配给它们的 DataTable 行。完成工作,然后相应地更新 DataTable 行并完成。
  4. 在操作结束或收到取消令牌时,DataTable 将序列化回 CSV 文件。

只有 1 个任务会访问单独的行,但多个任务会同时访问分配给它们的行。

这可能会给我带来问题吗?

由于没有两个任务会访问同一个 DataTable 行,因此是否有必要在每次任务读取或写入其 DataTable 行之前锁定 DataTable?

请参阅 DataTable class 的文档,其中指出:

Thread Safety

This type is safe for multithreaded read operations. You must synchronize any write operations.

所以更新的时候需要加锁。行读取和处理应该是安全的。

请注意,执行写入操作时读取是否安全尚不完全清楚。如果你宁愿安全也不愿后悔,你可以使用 ReaderWriterLockSlim.

鉴于您正在限制并发任务的数量,避免大量锁争用的一个好策略可能是为每个任务提供一个(顺序的)行号分区,并让它们执行批量更新许多已处理的行。