我有一个带标题的CSV文件。每行代表必须完成涉及HTTP请求和处理数据的工作。
我需要制作这个多线程,以便更快地运行,但我不确定DataTable是否适用于此。
我的流程将是:
只有1个任务可以访问单个行,但多个任务将同时访问其分配的行。
这可能会给我带来麻烦吗?
由于没有两个任务会访问同一个DataTable行,所以甚至需要在每次Task读取或写入其DataTable行之前锁定DataTable吗?
答案 0 :(得分:2)
请参阅DataTable
类的文档,其中声明:
线程安全
对于多线程读取操作,此类型是安全的。您必须同步任何写入操作。
因此,您需要在进行更新时锁定。行读取和处理应该是安全的。
请注意,在执行写入操作时,读取是否安全并不完全清楚。如果您想安全而不是抱歉,可以使用ReaderWriterLockSlim
。
鉴于您要限制并发任务的数量,避免大量锁争用的好策略可能是为每个任务提供一个(顺序)行号分区,并让它们对一个数字执行批量更新处理过的行。