【发布时间】:2020-01-15 21:56:13
【问题描述】:
我有一本包含不同类型项目的字典。通过向现有条目添加新条目和项目来更改字典。
并行处理记录的有效方法是什么。当字典记录 1 有 1 项,字典记录 2 有 200 项时。当一个新项目被添加到字典记录 1 时,它应该创建一个新线程并处理它,如果旧记录已经被处理,而不是等待整个批次完成。
Dictionary<ItemType, Queue<Item>> ItemsTypes = new Dictionary<Guid, Queue<Item>>();
使用下面的代码,我需要等到第一批项目处理完毕后再开始新的批次。
result = Parallel.ForEach(ItemsTypes, Items => processor.ProcessItems(Items.Value));
【问题讨论】:
-
如果在迭代时添加/删除项目,则无法使用 foreach。如果你想处理一个新项目 - 在旧项目“已经”处理之后,这意味着你不想并行运行。您还谈到了批处理,这也是单线程世界中的一个术语。它会等待这个,而不是那个......你的话有点混乱。
-
每次添加项目时生成一个新线程似乎效率很低 - 这种“处理”的本质是什么?
标签: c# .net multithreading