相关疑难解决方法(0)

哪个是在C#中为同步/异步任务添加重试/回滚机制的最佳方法?

想象一下WebForms应用程序,其中有一个名为CreateAll()的主方法.我可以一步一步地描述方法任务的过程如下:

1)存储到数据库(更新/创建Db项目3-4次)

2)启动一个新线程

3)Result1 =调用soap服务,并使用超时阈值检查状态和x分钟后.它继续(状态现在正常,这并不意味着失败)

4)存储到数据库(更新/创建Db项目3-4次)

5)result2 =呼叫肥皂服务(以火灾和忘记的方式)

6)更新配置文件(实际上从result1获取)

7)通过使用回调请求,它检查前端的每x秒结果2的状态,UI显示进度条.如果过程结束(100%)则表示成功

我正在考虑所有这些都是可以按类型分组的任务.基本上,几种类型的操作是:

  • Type1:DB事务
  • Type2:服务通信/交易
  • Type3:配置文件I/O事务

我想为现有实现添加回滚/重试机制,并使用面向任务的体系结构并重构现有的遗留代码.

我发现C#中的Memento Design PatternCommand Pattern之类的东西可以帮助达到这个目的.我还发现msdn Retry Pattern描述很有趣.我真的不知道,我希望有人带领我做出最安全和最好的决定......

您是否可以建议我保留现有实现和流程的最佳方法,但将其包装在一般的抽象重试/回滚/任务列表实现中?

最终的实现必须能够在每种情况下重试(无论任何任务或一般故障,例如整个createAll流程中的超时等),并且还会有一个回滚决策列表,其中应用程序必须能够回滚已完成的所有任务.

我想要一些例子来打破这个耦合代码.


PseudoCode可能有用:

class something
{  
    static result CreateAll(object1 obj1, object2 obj2 ...)
    {
        //Save to database obj1
        //...
        //Update to database obj1 
        //
        //NEW THREAD
       //Start a new thread with obj1, obj2 ...CreateAll
       //...          
     } 

    void CreateAllAsync()
    {
        //Type1 Save to database obj1
        //...
        //Type1 Update to database obj2

        //Type2 Call …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net design-patterns

22
推荐指数
2
解决办法
1634
查看次数

标签 统计

.net ×1

asp.net ×1

c# ×1

design-patterns ×1