是否有序列性工作库?

2017-03-11 22:02:58 +08:00
 coderfox
我也不是很清楚这个应该叫什么。

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

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

是否有这样的库能够检查和管理工作序列?
谢谢。
2886 次点击
所在节点    .NET
16 条回复
jimzhong
2017-03-11 22:14:08 +08:00
我也想知道是否有。
leeg810312
2017-03-11 23:10:39 +08:00
我理解正确的话, lz 是要一个工作流引擎,可以监控每个流程节点的状态,控制流程的流转,自然也能保存每一次流程执行的情况
tramedy
2017-03-11 23:33:34 +08:00
我司内部是用有些业务使用 Rule Engine 来实现类似的规则,还有些地方也用到了 RxJava 中的 Observable 等
可以看看
akira
2017-03-12 01:19:33 +08:00
看看状态机的东西符合你需求不
wohenyingyu02
2017-03-12 01:39:01 +08:00
扫了一眼标题就看到“性工作”三个字是不是撸多了
coderfox
2017-03-12 08:20:42 +08:00
@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
2017-03-12 14:55:16 +08:00
你说的是 Task ?
coderfox
2017-03-12 14:58:54 +08:00
@owt5008137
我需要把这种关系描述好,返回给调用 SDK 的程序,并且需要语义和非异步支持。
现在看到的解决方案似乎都是针对应用程序而非类库的。
我觉得似乎 Task 并不能满足我的需求。如能应用,望不吝赐教。
owt5008137
2017-03-12 16:48:55 +08:00
@coderfox 按我的理解,上面的三个步骤应该就是 3 个 Task 连起来呀
coderfox
2017-03-12 16:57:04 +08:00
@owt5008137 过程中还需要用户输入,所以不能把 Task 连起来返回。
owt5008137
2017-03-12 22:06:23 +08:00
@coderfox 需要输入的时候不能挂起 Task 然后等结束了再恢复么。本来 Task 也不是为同步行为设计的
coderfox
2017-03-12 22:25:58 +08:00
@owt5008137 在这个过程里还能传递参数进去?
leeg810312
2017-03-13 01:17:02 +08:00
有用户输入的流程控制我觉得需要用专门的工作流引擎,至于语意处理,可以引入类似 lua 的嵌入式脚本,或自己实现一个简单的脚本解析器,包装为 sdk ,供程序调用控制流程
owt5008137
2017-03-13 08:11:58 +08:00
@coderfox 我对.net 并不是特别熟,不过在典型的应用场景中不是等待 IO 然后处理恢复 Task 这种流程吗?这种流程肯定要根据 IO 的内容或者执行结果来再做处理的,所以肯定是能传数据进来吧
coderfox
2017-03-13 22:04:52 +08:00
@owt5008137
谢谢回答,但是因为我做的是 SDK ,我这里等待的传入参数不是来自用户输入,不能用类似 await Console.ReadLine() 的方案。
总之谢谢了。
noli
2017-03-20 12:27:09 +08:00
需求说得不够明确。虽然你认为不是 Task ,但根据我的理解,你需要的只是一个能够把 continuation 按照顺序执行的方式写出来的库。就算不是 Task 那也是跟他很相近的东西。可以考虑基于,如果 C++用 boost::coroutine ,如果 C# 用 Task 等等来做进一步封装成你需要的东西。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/346739

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX