当前位置: 首页 > news >正文

汝州建站公司建设人才网站

汝州建站公司,建设人才网站,互联网获客,电子商务网站开发实训总结报告一. 整体说明 揭秘#xff1a; 该章节的性质和上一个章节类似#xff0c;也是一个扩展的章节#xff0c;主要来研究Task类下的实例方法ContinueWith中的参数TaskContinuationOptions。 通过F12查看TaskContinuationOptions的源码#xff0c;知道主要有这么几个参数#xf…一. 整体说明 揭秘   该章节的性质和上一个章节类似也是一个扩展的章节主要来研究Task类下的实例方法ContinueWith中的参数TaskContinuationOptions。   通过F12查看TaskContinuationOptions的源码知道主要有这么几个参数   ①. LazyCancellation在延续取消的情况下防止延续的完成直到完成先前的任务。     (下面的例子task2取消原先的延续关系不复存在task1和task3可以并行执行)   ②. ExecuteSynchronously希望执行前面那个task的thread也在执行本延续任务     (下面的例子执行task2的Thread和执行task1的Thread是同一个所有二者的线程id相同)   ③. NotOnRanToCompletion和OnlyOnRanToCompletion     NotOnRanToCompletion延续任务必须在前面task非完成状态才能执行     OnlyOnRanToCompletion延续任务必须在前面task完成状态才能执行     (下面例子注释掉异常的这句代码task2不能执行task3能执行不注释task2能执行task3不能执行) 源码如下 1 [Serializable]2 [Flags]3 public enum TaskContinuationOptions4 {5 // 摘要: 6 // Default Continue on any, no task options, run asynchronously 指定应使用默认行为。7 // 默认情况下完成前面的任务之后将安排运行延续任务而不考虑前面任务的最终 System.Threading.Tasks.TaskStatus。8 None 0,9 // 10 // 摘要: 11 // 提示 System.Threading.Tasks.TaskScheduler 以一种尽可能公平的方式安排任务这意味着较早安排的任务将更可能较早运行而较晚安排运行的任务将更可能较晚运行。 12 PreferFairness 1, 13 // 14 // 摘要: 15 // 指定某个任务将是运行时间长、粗粒度的操作。 它会向 System.Threading.Tasks.TaskScheduler 提示过度订阅可能是合理的。 16 LongRunning 2, 17 // 18 // 摘要: 19 // 指定将任务附加到任务层次结构中的某个父级。 20 AttachedToParent 4, 21 // 22 // 摘要: 23 // 如果尝试附有子任务到创建的任务指定 System.InvalidOperationException 将被引发。 24 DenyChildAttach 8, 25 // 26 // 摘要: 27 // 防止环境计划程序被视为已创建任务的当前计划程序。 这意味着像 StartNew 或 ContinueWith 创建任务的执行操作将被视为 System.Threading.Tasks.TaskScheduler.Default 28 // 当前计划程序。 29 HideScheduler 16, 30 // 31 // 摘要: 32 // 在延续取消的情况下防止延续的完成直到完成先前的任务。 33 LazyCancellation 32, 34 // 35 // 摘要: 36 // 指定不应在延续任务前面的任务已完成运行的情况下安排延续任务。 此选项对多任务延续无效。 37 NotOnRanToCompletion 65536, 38 // 39 // 摘要: 40 // 指定不应在延续任务前面的任务引发了未处理异常的情况下安排延续任务。 此选项对多任务延续无效。 41 NotOnFaulted 131072, 42 // 43 // 摘要: 44 // 指定只应在延续任务前面的任务已取消的情况下才安排延续任务。 此选项对多任务延续无效。 45 OnlyOnCanceled 196608, 46 // 47 // 摘要: 48 // 指定不应在延续任务前面的任务已取消的情况下安排延续任务。 此选项对多任务延续无效。 49 NotOnCanceled 262144, 50 // 51 // 摘要: 52 // 指定只应在延续任务前面的任务引发了未处理异常的情况下才安排延续任务。 此选项对多任务延续无效。 53 OnlyOnFaulted 327680, 54 // 55 // 摘要: 56 // 指定只应在延续任务前面的任务已完成运行的情况下才安排延续任务。 此选项对多任务延续无效。 57 OnlyOnRanToCompletion 393216, 58 // 59 // 摘要: 60 // 指定应同步执行延续任务。 指定此选项后延续任务将在导致前面的任务转换为其最终状态的相同线程上运行。 如果在创建延续任务时已经完成前面的任务则延续任务将在创建此延续任务的线程上运行。 61 // 只应同步执行运行时间非常短的延续任务。 62 ExecuteSynchronously 524288, 63 } 二. 实际测试 下面通过代码来说明默认情况下、LazyCancellation、ExecuteSynchronously、NotOnRanToCompletion和OnlyOnRanToCompletion的作用和效果。 1. 默认情况 默认情况下task1执行完后→task2→task2执行完后→task3。   1 {2 Task task1 new Task(() 3 {4 Thread.Sleep(1000);5 Console.WriteLine(task1 tid{0} dt{1}, Thread.CurrentThread.ManagedThreadId, DateTime.Now);6 });7 8 var task2 task1.ContinueWith(t 9 { 10 Console.WriteLine(task2 tid{0} dt{1}, Thread.CurrentThread.ManagedThreadId, DateTime.Now); 11 }); 12 13 var task3 task2.ContinueWith(t 14 { 15 Console.WriteLine(task3 tid{0} dt{1} {2}, Thread.CurrentThread.ManagedThreadId, DateTime.Now, task2.Status); 16 }); 17 18 task1.Start(); 19 20 } 运行结果 task1执行完后→ task2执行→task2执行完后→ task3执行。 2. LazyCancellation 作用取消该线程该线程的前一个线程和后一个线程并行执行。 1 {2 CancellationTokenSource source new CancellationTokenSource();3 source.Cancel();4 5 Task task1 new Task(() 6 {7 Thread.Sleep(1000);8 Console.WriteLine(task1 tid{0} dt{1}, Thread.CurrentThread.ManagedThreadId, DateTime.Now);9 }); 10 11 var task2 task1.ContinueWith(t 12 { 13 Console.WriteLine(task2 tid{0} dt{1}, Thread.CurrentThread.ManagedThreadId, DateTime.Now); 14 }, source.Token, TaskContinuationOptions.LazyCancellation, TaskScheduler.Current); 15 16 var task3 task2.ContinueWith(t 17 { 18 Console.WriteLine(task3 tid{0} dt{1} {2}, Thread.CurrentThread.ManagedThreadId, DateTime.Now, task2.Status); 19 }); 20 21 task1.Start(); 22 23 } 运行结果 task2线程已经被取消task1线程和task2线程并行执行。 3. ExecuteSynchronously 作用希望执行前面那个task的thread也在执行本延续任务。 1 {2 Task task1 new Task(() 3 {4 Thread.Sleep(1000);5 Console.WriteLine(task1 tid{0} dt{1}, Thread.CurrentThread.ManagedThreadId, DateTime.Now);6 });7 8 var task2 task1.ContinueWith(t 9 { 10 Console.WriteLine(task2 tid{0} dt{1}, Thread.CurrentThread.ManagedThreadId, DateTime.Now); 11 }, TaskContinuationOptions.ExecuteSynchronously); 12 13 task1.Start(); 14 } 结果task1和task2线程的线程id相同。 4. NotOnRanToCompletion和OnlyOnRanToCompletion  NotOnRanToCompletion延续任务必须在前面task非完成状态才能执行。 OnlyOnRanToCompletion延续任务必须在前面task完成状态才能执行。 {Task task1 new Task(() {Thread.Sleep(1000);Console.WriteLine(task1 tid{0} dt{1}, Thread.CurrentThread.ManagedThreadId, DateTime.Now);//手动制造异常表示不能执行完毕//注释掉这句话task2不能执行task3能执行//不注释task2能执行task3不能执行//throw new Exception(hello world);});var task2 task1.ContinueWith(t {Console.WriteLine(task2 tid{0} dt{1}, Thread.CurrentThread.ManagedThreadId, DateTime.Now);}, TaskContinuationOptions.NotOnRanToCompletion);var task3 task1.ContinueWith(t {Console.WriteLine(task3 tid{0} dt{1}, Thread.CurrentThread.ManagedThreadId, DateTime.Now);}, TaskContinuationOptions.OnlyOnRanToCompletion);task1.Start(); } 分析task2和task3均为task的延续线程当task1报错时候task2执行task3不能执行当task1正常时候task2不能执行task3能执行。 task1报错时的运行结果 task2正常时的运行结果
http://www.huolong8.cn/news/335778/

相关文章:

  • 网站建设 宣传网站session 验证
  • 棋牌网站搭建公司关键词密度
  • 东莞保安南昌网站seo 优帮云
  • 如何为一个网站做app做网站大概费用
  • 一个域名可以绑定几个网站现在比较好的营销平台
  • wordpress .htaccess下载西安seo管理
  • 做网站用哪个软件写比较好培训网站大数据分析
  • 太原网站建站模板微信小程序开发官方文档
  • 定制衣服的网站我做的静态网站怎么发布到网上
  • 谷歌怎么做网站优化深圳科技公司排名100
  • 东莞网站建设哪里找北京 科技网站建设
  • 电子商务网站建设与管理英文营销型网站建设方案书
  • 网站布局用什么代码个人网站的网页
  • 吉安建站公司昌平区手机网站制作服务
  • 营销型网站建设品牌长沙制作公司宣传片哪家好
  • 如何通过轻淘客做网站软件开发网站
  • 进入 网站cms四川建设培训网
  • 查询网站服务器提供商2020广东黄页
  • 搭建一个商城网站网页搭建服务
  • 郑州汉狮做网站的大公司wordpress评论差价
  • 网站开发设计框图wap购物网站源码
  • 手机在线做ppt模板下载网站有哪些广州网站建设案件
  • 地铁公司招聘信息网站搜索公司信息的软件
  • 建设工程类公司网站wordpress添加网址导航页面
  • 什么网站可以做设计赚钱吗自己做网站申请域名
  • 中国变装网站教你如何做女人门户网站 cms
  • 广东工程建设信息网站外贸网站图片
  • 学习建网站玩网站建设学习互联网推广中心
  • 电脑做系统都是英文选哪个网站湛江市微信网站建设企业
  • 网站架构设计文档网站模板制作教程视频教程