00:00
欢迎大家继续观看上硅谷格斗技术视频,这一节课我们继续讲解任务的执行顺序。在中,有三种方式可以指定任务的执行顺序,分别是通过depend on强依赖的方式,第二种是通过task作为输入输出的方式,第三种是通过API直接指定其执行顺序。有兴趣的同学可以自行参考cor的官方文档,我们这里不做重点介绍。接着我们提一下任务的动态分配。强大的功能不仅仅在于我们可以定义任务的功能。而且它可以在循环过程中注册同一类型的多个任务。比如我们在这个循环过程中注册了四个任务。然后这些任务名都引用了上面这个变量,并且咱咱们在任务的行为里边输出了这个变量。任务注册好之后,我们就可以通过API来访问他们了。比如。复制一下。然后这里CTRLV。来,我们在这里做一个刷新。
01:01
这样他就注册了TASK01234个任务,我们来看一下。在A里边就有T0123,一共四个任务,没有问题。任务声明好之后,我们就可以通过API来访问他们。比如。我在这里通过。指定TASK0,让它强依赖TASK2和TASK3。啊,我们通过这种。API访问它的时候。这样毫无疑问就相当于指定了TASK0是在TASK2和TASK3之后执行。这样咱们再来执行这个TASK0,我可以直接点它,就相当于我们自己在这里输入指令啊。在TASK0执行之前,他确实执行了TASK2和TASK3。这是任务的动态分配。
02:00
继续,我们看一下任务的关闭与开启。咱们在每个任务声明的过程中,实际上我们都可以设置任务的enable属性。给它设置为true或者false,如果我们把它设置为false,它表示啊,我们会阻止这个任务的动作。来,我们给大家看一下。比如。注意。这个以内报的属性,我可以在任务内部声明,也可以在任务外部声明。我这里就在任务外部声明。比如刚才我们在执行TASK0的时候,它确实执行了TASK2和TASK3。那这一次我把TASK2。The enable。属性给它设置为啊。For。这样我们在执行TASK0的时候啊,由于TASK2。它的enable属性设置为false,所以啊。
03:01
在执行到TASK2的时候,它会阻止他的行为。啊,不让它执行,来,我们再来看一下。刷新。然后我们看other,我们运行TASK0。这一次,你会发现task和二并没有执行,它已经被啊,Skip跳过了。只执行了TASK3以及TASK0,没有问题。继续我们看一下任务的超时,实际上在任务生命过程中,它还有一个timeout超时属性。超时属性规定了这个任务。行为它执行的时间。如果我们超过了它规定的这个时间,那这个任务就会被中断。当前任务中断之后,它会抛出一个异常,势必也会影响到下边这个任务的执行。来,我们试一下复制过来。
04:04
把上边的给它覆盖掉。这里我们声明了两个任务,一个是任务A,一个是任务B。然后并且咱们为类为指定了一个超时属性。然后指令它啊,如果500毫秒还没有执行完毕,它就会啊抛出一个异常。来,我们先看一下。由于我们在do last的方法里边让他睡了。啊,1000毫秒,所以啊,肯定是超过这个时间了。所以此时咱们如果执行。Task a和task b。在执行task和A的时候。他就会抛出异常,抛出异常之后,他死的B也就执行不了了。你看。是不是task a1,它在执行过程中就抛出了超时的这样一个异常,嗯,Time out,超时异常,然后他也没有输出这句话,然后也没有啊执行任务B。
05:05
那如果一个任务在执行过程中。啊,出了异常,我不想让这个出异常的任务影响其他任务的执行,那怎么设置呢?诶,我可以在这里啊执行。这个任务的时候,给它加一个杠杠,Continue。这个参数,哎。刚刚continue就表示当某个任务出现异常的时候啊,他也不会影响其他任务的执行。它会把其他的任务。给他。执行完毕。例如这一次虽然也抛出了异常,也做了一个超时异常,但是这个任务B确实在执行了。OK啊,行,就这个。最后接着我们提一下这个任务的查找。任务的查找有两种方式,一种是根据任务名进行查找,一种是根据路径进行查找。任务名进行查找的时候,它只支持从当前product里边查找对应的类。
06:06
而根据这种路径进行查找的时候,它可以啊查找指定模块下或者指定project中的。某些任务。来,我们给大家看一下。比如CTRLC复制过来。然后我们把这些给它覆盖掉。我们这里声明了一个艾特硅谷这个任务,然后如果我们通过任务名或者说通过路径查找的话。啊,这个。通过路径查找的时候,它就是从这个根目录底下开始查找,这两种方式现在都是没有问题的。如果我们现在执行这个任务,都是可以执行的。而且查找到这个任务之后,咱们在这个任务。啊,之前又做了一个。输出。OK啊。
07:00
他是先输出的上硅谷三上海这个。啊,然后又输出的是上硅谷校区一。哎,我们来看一下,这里好像少一个。估计是由这个控制台造成的,咱们再来执行可多艾特硅谷。你看。他首先输出的是这个do first。应该是武汉这个,然后又输出的是啊。上海那个。啊,然后又输出的是这个。深圳那个,然后又输出的,北京的,最后输出的是。这个没有问题。这样我们无论是通过。
08:00
这个任务名啊,从当前product中查找,还是通过这种路径的方式都能查找到的,但是如果我把这个任务名给它剪切,剪切到子谱中,然后让它运行,这时候它就会啊报错。来。此时我们也可以啊。继续执行。刚才艾特硅谷这个类。这时候就报错了。报错的原因?就是由于。啊,他从这个子project中不能找到一个名字为艾特硅谷的。这样一个任务。相反,如果我们把这个根据路径查找的这个给它复制到,或者说剪切到子工程中,这样是没有问题的。因为在子工程的build grade文件中,咱们指定了是先去根工程中找。这个一个任务名为艾特硅谷的这样一个任务。
09:03
啊,然后找到他之后,然后给他添加一些行为,这样是可以的。OK啊,这样输出是没有问题的。好,这是这个任务的查道。
我来说两句