当前位置: 首页 > 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.zqtcl.cn/news/252212/

相关文章:

  • 无限个网站虚拟空间网站运行维护
  • 宝思哲手表网站关于计算机网站建设的论文
  • uc投放广告网站要自己做吗dw制作企业网站
  • 山东网站制作南京软件外包公司
  • 铁岭建设银行网站网站验证码原理
  • 做网站需要什么专业方向的员工钱多网站
  • 网站建设合同要存档几年7星彩网站开发
  • 网站建设好后 如何验收什么网站可以做护考题
  • 网站安全怎么做wordpress代币插件
  • 吉林网站建设电话龙华网站建设专业定制企业
  • 个人导航网站怎么备案js调用wordpress文章列表
  • 网站微信推广方案衡水外贸网站建设
  • 怎么打造自己的网站如何做自已网站
  • 美容美发网站模板wordpress适合优化吗
  • 网站开发的著作权和版权沧州市做网站价格
  • 优客逸家网站源码酒吧装修
  • 深圳网站制作的公司怎么样开工作室做网站怎样找资源
  • 大连城乡建设局网站seo编辑招聘
  • 网站建设意见怎么在中国移动做网站备案
  • 做内贸哪个网站找客户网络外包
  • 古玩网站建设意义钟山县住房和城乡建设局网站
  • 网站开发微信公众号自定义菜单规则网站建设
  • 营销网站建设工作教育培训wordpress主题
  • 温州地区做网站公司如何注册新公司
  • 做的网站怎样评估价值全国信息公示系统官网
  • 外国网站签到做任务每月挣钱1g内存vps 开电影网站
  • 营销型网站案例易网拓互联购物
  • 河南企业网站制作微信小程序如何做
  • 金坛住房和城乡建设局网站wordpress 需要授权吗
  • 个人理财的网站开发天津 公司网站建设