首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >4.WokflowCore之Saga事务

4.WokflowCore之Saga事务

作者头像
步步为营DotNet
发布2026-06-16 21:47:28
发布2026-06-16 21:47:28
10
举报

Saga事务

Saga可以封装一系列步骤,并可以为每个步骤进行补偿操作。

代码语言:javascript
复制
//Task2会抛出异常,则会触发undotask2和undotask1
builder
    .StartWith(context => Console.WriteLine("Begin"))
    .Saga(saga => saga
        .StartWith<Task1>()
            .CompensateWith<UndoTask1>()//补偿操作
        .Then<Task2>()
            .CompensateWith<UndoTask2>()
        .Then<Task3>()
            .CompensateWith<UndoTask3>()
    )
    .Then(context => Console.WriteLine("End"));
在这里插入图片描述
在这里插入图片描述

saga事务的重试

代码语言:javascript
复制
//该案例会5s重试一次
builder
    .StartWith(context => Console.WriteLine("Begin"))
    .Saga(saga => saga
        .StartWith<Task1>()
            .CompensateWith<UndoTask1>()
        .Then<Task2>()
            .CompensateWith<UndoTask2>()
        .Then<Task3>()
            .CompensateWith<UndoTask3>()
    )
    .OnError(Models.WorkflowErrorHandling.Retry, TimeSpan.FromSeconds(5))
    .Then(context => Console.WriteLine("End"));

补偿整个saga事务

代码语言:javascript
复制
builder
    .StartWith(context => Console.WriteLine("Begin"))
        .Saga(saga => saga
            .StartWith<Task1>()
            .Then<Task2>()
            .Then<Task3>()
    )
        .CompensateWith<UndoEverything>()//补充整个saga事务
    .Then(context => Console.WriteLine("End"));

给补偿步骤传参

代码语言:javascript
复制
builder
    .StartWith<SayHello>()
        .CompensateWith<PrintMessage>(compensate => 
        {
            compensate.Input(step => step.Message, data => "undoing...");
        })

ut(step => step.Message, data => “undoing…”); })

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Saga事务
    • saga事务的重试
    • 补偿整个saga事务
    • 给补偿步骤传参
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档