C#中的任务其他知识点

任务的其他知识

连续任务

如果一个任务t1的执行是依赖于另一个任务t2的,那么就需要这个任务t2执行完毕后再开始执行t1.这个时候需要使用连续任务

static void DoFirst()
    {
      Console.WriteLine("do  in task : "+Task.CurrentId);
      Thread.Sleep(3000);
    }
static void DoSecond(Task t)
    {
      Console.WriteLine("task "+t.Id+" finished.");
      Console.WriteLine("this task id is "+Task.CurrentId);
      Thread.Sleep(3000);
    }

Task t1 = new Task(DoFirst);
Task t2 = t1.ContinueWith(DoSecond);
Task t3 = t1.ContinueWith(DoSecond);
Task t4 = t2.ContinueWith(DoSecond);

Task t5 = t1.ContinueWith(DoError,TaskContinuationOptions.OnlyOnFaulted);
//t2和t3的执行依赖于t1
//t2和t3是异步执行的
//t4的执行依赖于t2

任务的层次结构

当我们在一个任务中启动一个新的任务,相当于新的任务是当前任务的一个子任务,两个任务是异步执行的;
如果父任务执行完了但是子任务没有执行完,它的状态会设置为WaitingForChildrenToComplete,只有当子任务也执行完毕了,父任务的状态才会变成RunToCompletion

static void Main()
{
  var parent = new Task(ParentTask);
  parent.Start();
  Thread.Sleep(2000);
  Console.WriteLine(parent.Status);
  Thread.Sleep(4000);
  Console.WriteLine(parent.Status);
  Console.ReadKey();
}
static void ParentTask(){
  Console.WriteLine("task id "+Task.CurrentId);
  var child = new Task(ChildTask);
  child.Start();
  Thread.Sleep(1000);
  Console.WriteLine("parent started child , parent end");
}
static void ChildTask(){
  Console.WriteLine("child");
  Thread.Sleep(5000);
  Console.WriteLine("child finished ");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值