独自旅行 发表于 2021-5-19 16:28

C#求助 如何按顺序进行任务(同时还能中止整个流程)?

本帖最后由 独自旅行 于 2021-5-19 16:33 编辑

我想做一个顺次进行环节步骤,但是中间附加有中止条件的设计。

比如说:环节1()—》环节2()—》环节3()—》……;
任一环节报错就让任务串中止。人工排查后手动重开任务串。

目前找到的方向是使用task类来实现。

但是还是有很多地方不明确。C#里面task这个类怎么用啊?
比如说任务之间是同时开始的,完全没有承接条件,不知道如何实现环节1》环节2》环节3……这样一个任务顺序流。
是使用Task.ContinueWith吗?网络博文说说它可以『在第一个Task完成后自动启动下一个Task,实现Task的延续』,有人用过吗?怎么用?

以及Task的取消该怎么做?

我看了一下博文,设想是使用task嵌套的方式,当某个值开关赋值之后启动task取消,取消父进程从而中止整个进程。

if(…………)
{
Application.Exit();
}
的设计是万万不可的,不然的话看上去就好像任务完成了一样,还不知道哪个环节出了问题。

不过,如果有更简单易行的设计方向,也请指教一下。多谢了。

hxdhttk 发表于 2021-5-19 16:34

这个吗?

hxdhttk 发表于 2021-5-19 16:35

https://mp.weixin.qq.com/s/TqrYj7CdafeAGjJMM13D7w

独自旅行 发表于 2021-5-19 16:39

hxdhttk 发表于 2021-5-19 16:35
https://mp.weixin.qq.com/s/TqrYj7CdafeAGjJMM13D7w

多谢指教。

独自旅行 发表于 2021-5-19 16:49

哎呀?
我刚刚发现我其实只是要一个同步流程啊?
那我是不是搞错方向了?

ryanz 发表于 2021-5-19 17:00

怎么听着这么像消息队列做的事,一个订单,然后出错后回滚。不过,如果只是单机的,不是分布式的,那不就是你自己说的同步流程,然后写好callback就行了

seducer0719 发表于 2021-5-19 17:21

同步的话顺序写就行了,外面包个try catch

EraserKing 发表于 2021-5-19 18:09

1 是的 用Continue With链式调用
2 使用带Cancellation Token的重载,注意Cancellation Token只是相当于flag,需要手动处理,不是Cancel就自动中止
3 Continuation Options.Not on Cancelled

— from Xiaomi MIX 2S, Android 10 of S1 Next Goose v2.4.4.1

计算机组成原理 发表于 2021-5-19 18:14

7楼说得对,看你需求,跟Task根本不沾边,按顺序写就行了。

独自旅行 发表于 2021-5-19 20:01

seducer0719 发表于 2021-5-19 17:21
同步的话顺序写就行了,外面包个try catch

同步流程不知道怎么中间环节中止。

すぴぱら 发表于 2021-5-19 20:15

task的意义不是要让异步更方便吗,你这个用不到异步其实,每个步骤判断一下得了

独自旅行 发表于 2021-5-19 20:45

すぴぱら 发表于 2021-5-19 20:15
task的意义不是要让异步更方便吗,你这个用不到异步其实,每个步骤判断一下得了 ...
try catch知道格式是什么,就是不知道如何搞一个可以中间中止的顺次流程。

美人希 发表于 2021-5-19 20:50

子方法抛检查异常外面catch住咯

— from OPPO PEGM00, Android 11 of S1 Next Goose v2.4.4.1

hourousha 发表于 2021-5-19 20:51

独自旅行 发表于 2021-5-19 20:59

hourousha 发表于 2021-5-19 20:51
首先,为何放着await语法糖不用去用ContinueWith?
其次,如果只是出错中止,那么完全没有使用task的必要。 ...
因为博文上面没写。
输出日志不是不行,不过我设想的是中止流程跳信息窗报告。
因为程序的目标不是很复杂,功能单一。
但是中间几个步骤下来,如果出错就会影响后续。
所以就算是单一,也还是要做好中止对策。
哪怕只是减轻日常重复任务的脚本小子。

hourousha 发表于 2021-5-19 21:05

すぴぱら 发表于 2021-5-19 21:59

本帖最后由 すぴぱら 于 2021-5-19 22:03 编辑

独自旅行 发表于 2021-5-19 20:45
try catch知道格式是什么,就是不知道如何搞一个可以中间中止的顺次流程。 ...

我甚至觉得都用不到async await这种现代语发糖,你按照java祖传的路线把callback全弄成interface / event delegate 然后返回个int把报错信息和执行结果包装一下都行 http都写过吧

当然有await return value和canceltoken这种高级语法糖,没人愿意写祖传的callback就是了

顺便不想用async await,你可以按照那些c#游戏引擎的路数实现个单线程coroutine yield return,想怎么停就怎么停

独自旅行 发表于 2021-5-20 14:46

すぴぱら 发表于 2021-5-19 21:59
我甚至觉得都用不到async await这种现代语发糖,你按照java祖传的路线把callback全弄成interface...

写了个do循环暂时应付一下。
中间要验证错误的环节加个try{dosometing()}catch{return},

但是接下来就得开始学着使用队列了。

commanderyuri 发表于 2021-5-20 15:48

页: [1]
查看完整版本: C#求助 如何按顺序进行任务(同时还能中止整个流程)?