好的,这就是问题所在。我们将 CQRS 与 Event Sourcing 结合使用,并且我们在每个聚合实例的提交序列中使用事件流。并且每个流都保留其各自的创建日期,但问题是所有这些都发生得太快了,这意味着作为某些过程(注册、通知等)的一部分的一些聚合事件流出来了与完全相同的日期。因此,当我们必须重播事件时,按创建日期对流进行排序不起作用,因为有些事件流在时间上是相关的,但它们发生得如此之快以至于看起来它们是并行发生的(这意味着我们使用 DateTime.UtcNow 和日期等于纳秒)。
对于那些不知道 CQRS 或事件溯源是什么的人
假设您有一个资源列表,并且每个项目都有其创建日期。了解列表中项目的创建顺序至关重要。请记住,有多个线程在列表中创建和添加项目。问题是当一个线程必须在列表中创建和添加两个项目时,它们的创建日期匹配你不能正确地按日期排序。顺便说一句,我的电脑上的电脑很重要 DateTime.Now 不等于服务器上的 DateTime.Now 。实际上,在同事将 25000 次 DateTime.Now 加入到列表中时,列表的第一个和最后一个元素等于纳秒(精确匹配)