多个Orchestration调用同一Durable Entity时是否会排队等待执行?
Durable Entity 运行机制问题解答
场景问题结论
你描述的测试场景下,B调用Durable Entity读取值时,会等待A的更新操作完全执行完成后才会执行读取逻辑,最终返回A更新后的最新值,不会读到脏数据。
核心原因
Durable Entity从设计上就保证了单实例的操作串行性:所有针对同一个实体ID的操作,无论读、写类型,都会按照请求到达的先后顺序进入实体对应的控制队列排队,同一时间仅会有一个操作在该实体上执行,前序操作未执行完毕时,后续所有操作都会保持阻塞等待状态。
你用到的非signal方式调用(即编排器调用CallEntityAsync方法)只是会让发起调用的编排器同步等待操作返回结果,并不影响操作本身的入队顺序和执行规则:A的更新请求先入队,就会优先执行完整的30秒更新逻辑,更新完实体成员后才会处理队列中后续B的读取请求。
Control Queue处理规则确认
所有针对**同一个Durable Entity实例(相同实体类型+相同实体ID)**的请求,在Control Queue层面都是严格按照入队顺序串行处理的,不存在并行执行的情况,这是Durable Functions为了保证实体状态一致性的原生设计,无需额外引入分布式锁即可保证所有操作的原子性和顺序性。
补充说明:如果你使用
SignalEntityAsync方法调用实体,仅会让调用方无需等待操作执行完成就直接返回,操作本身仍然会进入控制队列按顺序执行,不会打乱队列中已有请求的执行顺序。
内容的提问来源于stack exchange,提问作者dsun
相关产品推荐
相关产品推荐

