我有一个带标头的CSV文件。每行代表涉及HTTP请求和处理数据必须完成的工作。
我需要进行此多线程,以便更快地工作,但我不确定数据是否适合此。
我的过程将是:
- 将CSV加载到DataTable
- 调度程序函数将排队任务,分配每个任务一个数据表编号(我将限制并发任务的数量)
- 每个任务将仅读取其分配的数据表行。进行工作,然后相应地更新数据行并完成。
- 在末尾或操作或收到取消令牌时,数据表将序列化回CSV文件。
只有1个任务将访问单个行,但多个任务将同时访问其分配的行。
这可能会给我带来问题吗?
由于没有两个任务将访问相同的数据表行,甚至有必要在任务从读取或写入其数据表行之前锁定数据表?
请参阅DataTable
类的文档,该文档说明:
线程安全
此类型是可用于多线程读取操作的安全。您必须同步任何写入操作。
因此,进行更新时需要锁定。行读取和处理应该是安全的。
请注意,在执行写作操作时,尚不完全清楚读取是否安全。如果您想安全而不是对不起,可以使用ReaderWriterLockSlim
。
鉴于您正在限制并发任务的数量,避免大量锁定争论的好策略可能是为每个行为提供行号的(顺序)分区,并让他们在数字上执行批处理更新加工行。