是否有序列性工作库? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coderfox
V2EX    .NET

是否有序列性工作库?

  •  
  •   coderfox 2017-03-11 22:02:58 +08:00 3315 次点击
    这是一个创建于 3141 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我也不是很清楚这个应该叫什么。

    需求是:客户端有一些函数,共同作用用来完成一项操作,我希望能有库来校验执行状态和保存过去的执行结果。

    例子:
    为完成用户注册操作,我需要:
    ①设置昵称;
    ②获取 TOS ;
    ③同意 TOS 。共计三步。
    每一步都依赖于前面每一步的执行(甚至执行结果),在执行③时需要用户输入,但我做的是 API 的 SDK 。

    是否有这样的库能够检查和管理工作序列?
    谢谢。
    16 条回复    2017-03-20 12:27:09 +08:00
    jimzhong
        1
    jimzhong  
       2017-03-11 22:14:08 +08:00
    我也想知道是否有。
    leeg810312
        2
    leeg810312  
       2017-03-11 23:10:39 +08:00 via Android
    我理解正确的话, lz 是要一个工作流引擎,可以监控每个流程节点的状态,控制流程的流转,自然也能保存每一次流程执行的情况
    tramedy
        3
    tramedy  
       2017-03-11 23:33:34 +08:00
    我司内部是用有些业务使用 Rule Engine 来实现类似的规则,还有些地方也用到了 RxJava 中的 Observable 等
    可以看看
    akira
        4
    akira  
       2017-03-12 01:19:33 +08:00
    看看状态机的东西符合你需求不
    wohenyingyu02
        5
    wohenyingyu02  
       2017-03-12 01:39:01 +08:00
    扫了一眼标题就看到“性工作”三个字是不是撸多了
    coderfox
        6
    coderfox  
    OP
       2017-03-12 08:20:42 +08:00 via Android
    @jimzhong @leeg810312 @tramedy @akira
    谢谢!
    看了一下,这些和需求都不太接近,但可以参考,决定还是自己造轮子了。

    主要是流程上没法实现语义化,只能简单地 continue ,做 SDK 的话不太友好。
    例如:
    Workflow reg = client.getRegWorkflow();
    reg.setNickname("sth");
    var tos = reg.getTos("sth");
    if( tos ...... ) reg.acceptTos(reg.getResult(reg.steps.GET_TOS).tosId);

    如果这些技术能的话,还望不吝赐教。
    owt5008137
        7
    owt5008137  
       2017-03-12 14:55:16 +08:00 via Android
    你说的是 Task ?
    coderfox
        8
    coderfox  
    OP
       2017-03-12 14:58:54 +08:00 via Android
    @owt5008137
    我需要把这种关系描述好,返回给调用 SDK 的程序,并且需要语义和非异步支持。
    现在看到的解决方案似乎都是针对应用程序而非类库的。
    我觉得似乎 Task 并不能满足我的需求。如能应用,望不吝赐教。
    owt5008137
        9
    owt5008137  
       2017-03-12 16:48:55 +08:00 via Android
    @coderfox 按我的理解,上面的三个步骤应该就是 3 个 Task 连起来呀
    coderfox
        10
    coderfox  
    OP
       2017-03-12 16:57:04 +08:00 via Android
    @owt5008137 过程中还需要用户输入,所以不能把 Task 连起来返回。
    owt5008137
        11
    owt5008137  
       2017-03-12 22:06:23 +08:00 via Android
    @coderfox 需要输入的时候不能挂起 Task 然后等结束了再恢复么。本来 Task 也不是为同步行为设计的
    coderfox
        12
    coderfox  
    OP
       2017-03-12 22:25:58 +08:00 via Android
    @owt5008137 在这个过程里还能传递参数进去?
    leeg810312
        13
    leeg810312  
       2017-03-13 01:17:02 +08:00 via Android
    有用户输入的流程控制我觉得需要用专门的工作流引擎,至于语意处理,可以引入类似 lua 的嵌入式脚本,或自己实现一个简单的脚本解析器,包装为 sdk ,供程序调用控制流程
    owt5008137
        14
    owt5008137  
       2017-03-13 08:11:58 +08:00 via Android
    @coderfox 我对.net 并不是特别熟,不过在典型的应用场景中不是等待 IO 然后处理恢复 Task 这种流程吗?这种流程肯定要根据 IO 的内容或者执行结果来再做处理的,所以肯定是能传数据进来吧
    coderfox
        15
    coderfox  
    OP
       2017-03-13 22:04:52 +08:00 via Android
    @owt5008137
    谢谢回答,但是因为我做的是 SDK ,我这里等待的传入参数不是来自用户输入,不能用类似 await Console.ReadLine() 的方案。
    总之谢谢了。
    noli
        16
    noli  
       2017-03-20 12:27:09 +08:00
    需求说得不够明确。虽然你认为不是 Task ,但根据我的理解,你需要的只是一个能够把 continuation 按照顺序执行的方式写出来的库。就算不是 Task 那也是跟他很相近的东西。可以考虑基于,如果 C++用 boost::coroutine ,如果 C# 用 Task 等等来做进一步封装成你需要的东西。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     890 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:17 PVG 05:17 LAX 14:17 JFK 17:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86