任务嵌套就是指在一个任务中又创建了一个任务,而这个新建的任务,就被称为子任务。在没有特殊声明的情况下,父子任务是一起运行的,如SimpleNestedTask方法。
  如果想让父子任务关联起来的话,需要在创建子任务的时候,增加参数TaskCreationOptions.AttachedToParent,将父子任务关联起来,这样父任务将等待子任务完成,才会完成。
  如果使用Task<TResult>创建任务的话,这不需要使用TaskCreationOptions.AttachedToParent参数了,因为只要父任务使用了子任务的返回结果,父任务自然就会等待子任务完成。

 public class Program{static void Main(string[] args){ WaitForSimpleNestedTask();Console.WriteLine("=====================================================");SimpleNestedTask();Thread.SpinWait(600000);//等待SimpleNestedTask结束 再运行Console.WriteLine("=====================================================");//SimpleNestedTaskAttachedToParent();
            Console.Read();}static void WaitForSimpleNestedTask(){var outer = Task<int>.Factory.StartNew(() =>{Console.WriteLine("Outer1 task executing.");var nested = Task<int>.Factory.StartNew(() =>{Console.WriteLine("Nested1 task starting.");Thread.SpinWait(5000000);Console.WriteLine("Nested1 task completing.");return 42;});// 父任务等待子任务完成return nested.Result;// 父任务不等待子任务完成//return 1;
            });//输出的时候使用了返回值outer.Result,所以自动等待父任务完成Console.WriteLine("Outer1 has returned {0}.", outer.Result);}static void SimpleNestedTask(){var parent = Task.Factory.StartNew(() =>{Console.WriteLine("Outer2 task executing.");var child = Task.Factory.StartNew(() =>{Console.WriteLine("Nested2 task starting.");Thread.SpinWait(500000);Console.WriteLine("Nested2 task completing.");});});//等待父任务完成,再输出字符串,如果没有这个等待,这句话会先输出
            parent.Wait();Console.WriteLine("Outer2 has completed."); }static void SimpleNestedTaskAttachedToParent(){var parent = Task.Factory.StartNew(() =>{Console.WriteLine("Outer3 task executing.");var child = Task.Factory.StartNew(() =>{Console.WriteLine("Nested3 task starting.");Thread.SpinWait(500000);Console.WriteLine("Nested3 task completing.");}, TaskCreationOptions.AttachedToParent);//增加参数TaskCreationOptions.AttachedToParent,将子任务附加进父任务,这样子任务完成后,父任务才算完成。
            });//等待父任务完成,再输出字符串,如果没有这个等待,这句话会先输出
            parent.Wait();Console.WriteLine("Outer has completed.");}

View Code

转载于:https://www.cnblogs.com/kiba/archive/2013/06/14/3134953.html

C#嵌套任务和子任务相关推荐

  1. ACL 2021 | 复旦大学邱锡鹏组:面向不同NER子任务的统一生成框架

    ©作者 | 刘兴贤 学校 | 北京邮电大学硕士生 研究方向 | 自然语言处理 论文题目: A Unified Generative Framework for Various NER Subtasks ...

  2. C语言函数(函数嵌套、递归调用)+局部变量和全局变量+extern关键字的使用+Visual Studio简单的使用教程+数据存储类别+内部函数外部函数

    上一篇文章:编译预处理知识点梳理:宏定义+文件包含+条件编译 C语言函数(函数嵌套.递归调用--+局部变量和全局变量+extern关键字的使用+Visual Studio简单的使用教程+数据存储类别+ ...

  3. 浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用

    1. 嵌套执行 make 在一个大的工程文件中,不同的文件按照功能被划分到不同的模块中,每个模块可能都会有自己的编译顺序和规则,如果在一个 Makefile 文件中描述所有模块的编译规则,就会很乱,执 ...

  4. java gui 案例_JavaGui入门—布局的嵌套使用附实例

    JavaGui布局 常见布局 BorderLayout(边界布局) BorderLayout.EAST BorderLayout.WAST BorderLayout.NORTH BorderLayou ...

  5. android h5弹窗,Android嵌套html5页面中alert 弹出框问题

    最近项目中遇到一个头疼的问题,那就是在安卓里嵌套html5的时候发现alert弹出框出现了问题 那就是弹出的时候会出现串 来自http://xxxxx 网页的提示 然后下面出来具体的弹出信息,还有更奇 ...

  6. C++ 笔记(03)— 命名空间(概念、定义、调用、using name 指令、嵌套命名空间)

    1. 命名空间概念 在 C++ 应用程序中, 您可能会写一个名为 func() 的函数,在另一个可用的库中也存在一个相同的函数 func() .这样,编译器就无法判断您所使用的是哪一个 func() ...

  7. Android 你知道界面布局嵌套多少层之后会Crash吗

    我们先放一张Hierarchy Viewer的图:(模拟器Android4.4) 看到数字6了吗,那个RelativeLayout是MainActivity的根ViewGroup, 而在Relativ ...

  8. python嵌套字典取值_python嵌套字典比较值与取值的实现示例

    python嵌套字典比较值与取值的实现示例 本文通过示例给大家介绍了python嵌套字典比较值,取值,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 示例代码 #取值import t ...

  9. mysql所有班级名称和人数_mysql数据库优化课程---12、mysql嵌套和链接查询(查询user表中存在的所有班级的信息?)...

    mysql数据库优化课程---12.mysql嵌套和链接查询(查询user表中存在的所有班级的信息?) 一.总结 一句话总结: in:distinct:select * from class wher ...

最新文章

  1. 初学MyBatis-Plus
  2. lstm timestep一般是多少_用LSTM中的不同时间步长预测使用keras
  3. Docker核心技术
  4. 使用 GetStartupInfo 检查自己是否被调试
  5. 表情显示服务器异常,MySqlmoji表情引发的存储异常微信昵称
  6. JavaScript数组方法大全(推荐)
  7. Mean Shift算法(2)在OpenCV上的实现目标跟踪——直方图反向投影
  8. status 状态为 pending
  9. 数据目录是什么?为何需要它?
  10. p坚持csma协议 仿真‘_签了“三方协议”,还算应届毕业生吗!?
  11. 如何在微信小程序中实现实时会话(聊天)系统
  12. 怎样清除浏览器缓存?
  13. html页面 消除横向滚动条,框架网页中去掉横向(水平)滚动条的方法
  14. steps_per_epoch 与 epochs 的关系
  15. #! 脚本解释器(如何不加node 直接执行js文件)
  16. Vue----vue-cli
  17. 使用示波器测量导线长度
  18. CUDA C Dynamic Parallelism
  19. java中文首字母_好用的获取中文字符串拼音首字母的方法(亲测)
  20. java页码_Java 添加页码到PDF文档

热门文章

  1. 第十四章:详解Jenkins节点配置
  2. Android动画模式
  3. sql2000 中 存储过程 相关
  4. WCF六大步的前三步
  5. 体二极管的原理及应用
  6. 关于Ubuntu 安装tftp服务器的问题解决
  7. libudev-dev 错误 libudev1 (= 204-5ubuntu20) 但是 204-5ubuntu20.5 正要被安装 解决方法
  8. 【拔刀吧少年】之shell数组
  9. java定义一个类_java如何定义一个类,创建它的成员变量和方法?
  10. #每日一题:小计算器(模拟)