我在Azure表中有合理数量的记录,我正在尝试进行一些时间数据加密。我以为我可以通过使用 Parallel.ForEach. 。另外,因为有超过1k的记录,我不想自己弄乱延续令牌,所以我使用cloudtablequery来获取我的枚举者。

我的问题是我的某些记录已被双重加密,我意识到我不确定枚举者如何安全返回 CloudTableQuery.Execute() 是。有其他人在这种组合方面有任何经验吗?

有帮助吗?

解决方案 2

尽管我尽了最大的努力,但我一直无法复制我的原始问题。因此,我的结论是完全可以使用 Parallel.ForEach 循环与 CloudTableQuery.Execute().

其他提示

我愿意打赌答案以执行返回线程安全 IEnumerator 实施极不可能。也就是说,这听起来像是 生产者消费者模式.

在您的特定情况下,我将拥有称为执行的原始线程,然后将结果依次读取,然后将其塞入一个 BlockingCollection<T>. 。不过,在您开始这样做之前,您想单独启动 Task 这将控制这些项目的消费 Parallel::ForEach. 。现在,您可能还想考虑使用 GetConsumingPartitioner ParalLelexensions库的方法是最有效的,因为在这种情况下,默认分区者将创建比您想要的更多的开销。您可以从中了解更多信息 这篇博客文章.

使用的额外奖励 BlockingCollection<T> 在原始 ConcurrentQueueu<T> 是它提供了能力 设置界限 这可以帮助阻止生产者在收藏中添加更多的项目,而不是消费者可以跟上的。当然,您需要进行一些性能测试,以找到应用程序的最佳位置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top