gpt4 book ai didi

c# - 如果 DateTime.Now 不够好怎么办?

转载 作者:行者123 更新时间:2023-11-30 16:17:15 28 4
gpt4 key购买 nike

好的,问题来了。我们将 CQRS 与事件溯源一起使用,并且我们在聚合实例的每个提交序列中使用事件流。每个流都保留了各自的创建日期,但问题是所有这一切发生得太快了,这意味着一些聚合事件流,它们是某些过程(注册、通知等)的一部分,出来了日期完全相同。因此,当我们必须重播事件时,按创建日期对流进行排序是行不通的,因为存在依赖于时间的事件流,但它们发生的速度如此之快,以至于它们看起来像是平行发生的(这意味着我们使用了 DateTime.UtcNow 和日期等于纳秒)。

对于那些不知道什么是 CQRS 或事件溯源的人

假设您有一个资源列表,每个项目都有其创建日期。了解列表中项目的创建顺序至关重要。请记住,有多个线程在列表中创建和添加项目。问题是,当一个线程必须在列表中创建和添加两个项目时,它们的创建日期与您无法按日期正确排序。顺便说一句,我的电脑上的电脑很重要 DateTime.Now 不等于服务器上的 DateTime.Now。实际上在一个同事 pcadding 25000 次 DateTime.Now 到列表结果列表的第一个和最后一个元素等于纳秒(完全匹配)

最佳答案

时间戳是一种有用的元数据。正如您所发现的那样,它不是可靠的排序标准。想象一下,您在自己的机器上提出了一些解决方案,但现在必须使用两台机器?你能让他们的时钟在纳秒内保持同步吗?少?

在事件溯源中,典型的保证只是事件在单个流中排序,例如一聚合。无论如何,这是您的交易保证。为什么不只使用一个整数来跟踪流中每个事件的顺序?您的聚合可以生成它,因为它一直在跟踪所有事件。

如果你想跨流排序,你必须要么集中生成那个序列号(用代表的耦合),要么接受多个流的多次读取不会总是以相同的顺序返回事件,只是那些事件应该对一个流中的内容进行排序。

关于c# - 如果 DateTime.Now 不够好怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483645/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com