You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Automatonymous中过滤事件后无法触发UnhandledEventException的问题

解决Automatonymous过滤器不匹配时手动抛出未处理异常的问题

问题核心:当你为事件设置过滤器后,即使事件未通过过滤,Automatonymous仍会将其标记为“已处理”(因为当前状态存在该事件的处理定义),导致OnUnhandledEvent不会触发。要实现过滤器不匹配时抛异常,可通过以下方式:

方法:使用Else()分支手动抛出异常

在事件处理的链式调用中添加Else()方法,专门处理过滤器不匹配的场景,直接抛出异常:

During(
    this.ToBeReviewed,
    When(this.Approve, IsCreatedByOtherUserAccountId())
        .TransitionTo(this.Approved)
        .Then(AddUserAcceptedEvent)
        .Else(context => 
        {
            // 手动抛出未处理事件异常,或自定义业务异常
            throw new UnhandledEventException(context.Instance, context.Event);
        })
);

原理说明

  • Else()方法会在事件未通过过滤器匹配时触发,刚好弥补OnUnhandledEvent的局限性——后者仅针对当前状态完全没有该事件处理定义的场景
  • 抛出UnhandledEventException可以和框架原生的未处理事件行为保持一致,也可根据业务需求替换为自定义异常类型

内容的提问来源于stack exchange,提问作者Jamie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:40:33