3 Task中的一些枚举 创建时候的、continue时候的
创建时常用的枚举:
None、PreferFairness、LongRunning、AttacthedToParent、DenyChildAttach、HideScheduler
AttacthedToParent:
背景代码如下
using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//创建了一个线程1
Task t = Task.Factory.StartNew(() =>
{
Console.WriteLine("thread 1");
Task t1 = new Task(() =>{
Thread.Sleep();
Console.WriteLine( "task 11"); });
Task t2 = new Task(() => { Console.WriteLine("task 12"); });
t1.Start();
t2.Start();
//下面continue中的新的线程 肯定是在 线程1之后
//但是在线程1里面又另外启用了2 个线程 continue中的线程就未必在这两个线程执行完之后执行
}).ContinueWith(_t=> {
Console.WriteLine("thread 2");
});
Console.ReadKey(); } }
}
thread 1
thread 2
task 12
task 11
这时 如果要continue中启用的线程在task t内部所有线程执行完毕之后再执行可以使用 AttacthedToParent枚举
using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//创建了一个线程1
Task t = Task.Factory.StartNew(() =>
{
Console.WriteLine("thread 1");
Task t1 = new Task(() =>
{
Thread.Sleep();
Console.WriteLine("task 11"); }, TaskCreationOptions.AttachedToParent);
Task t2 = new Task(() => { Console.WriteLine("task 12"); }, TaskCreationOptions.AttachedToParent);
t1.Start();
t2.Start();
//下面continue中的新的线程 肯定是在 线程1之后
//但是在线程1里面又另外启用了2 个线程 continue中的线程就未必在这两个线程执行完之后执行
}).ContinueWith(_t =>
{
Console.WriteLine("thread 2");
});
//如果不允许t1 和 t2附加到t上面
//}, TaskCreationOptions.DenyChildAttach).ContinueWith(_t =>
//{
// Console.WriteLine("thread 2");
//});
Console.ReadKey();
}
}
}
执行结果:
thread 1
task 12
task 11
thread 2
AttacthedToParent的效果相当于t.WaitAll(t1,t2)
LongRunning :长时间运行的任务 ,如果你明知道是长时间执行的,建议你使用此枚举。因为这个枚举创建的线程是一个新建的Thread 而不是线程池的线程。为什么要这么搞呢,因为如果你不这么搞,使用的是线程池的线程,线程池的线程长期少一个的话,线程池会再创建一个线程,当你这个线程执行完毕还给线程池的时候,线程池的线程就比原来的线程池多一个,导致线程池线程过多,导致cpu切换时间变长等问题。
PreferFairness 让各个线程看起来公平点,会将task扔到ThreadPool的全局队列中,让workthread进行争抢,不这样搞默认会放进thread的一个本地队列中。
3 Task中的一些枚举 创建时候的、continue时候的的更多相关文章
- asp.net MVC 中枚举创建下拉列表?
我将尝试使用 Html.DropDownList 扩展方法,但不能找出如何使用它的枚举. 让我们说我有一个这样的枚举: public enum ItemTypes { Movie = 1, Game ...
- 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改的记录数
开篇语 在这篇日志中 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架 我介绍到了包级别的日志管理框架,那么这个主要是针对包这一个层级的 Log 信息,包括包开始执行和结束时间,以 ...
- 微软BI 之SSIS 系列 - 理解Data Flow Task 中的同步与异步, 阻塞,半阻塞和全阻塞以及Buffer 缓存概念
开篇介绍 在 SSIS Dataflow 数据流中的组件可以分为 Synchronous 同步和 Asynchronous 异步这两种类型. 同步与异步 Synchronous and Asynchr ...
- nodejs中使用worker_threads来创建新的线程
目录 简介 worker_threads isMainThread MessageChannel parentPort和MessagePort markAsUntransferable SHARE_E ...
- 【C# Task】理解Task中的ConfigureAwait配置同步上下文
原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获 ...
- Spring中常见的bean创建异常
Spring中常见的bean创建异常 1. 概述 本次我们将讨论在spring中BeanFactory创建bean实例时经常遇到的异常 org.springframework.beans.fa ...
- 在Grunt task中集成Protractor
Protractor是专为AngularJS应用程序编写的UI自动化测试框架.前端构建有很多构建工具,比如Grunt.Gulp等.一般我们会把这些构建工具作为集成集成的脚本执行工具.所以如果把Prot ...
- MAPINFO中利用GridMaker工具创建栅格图层
在工作中需要使用栅格地图,以往都是由研发人员来创建,今天偶然发现Mapinfo中有GridMaker这样一个工具,结合网络搜索自己试了一下,居然做成功了,这里把步骤记录下来,方便以后查看. 1.首先在 ...
- access中根据一个表创建另一个
access中根据一个表创建另一个 SELECT * INTO newTableFROM zD_qlr; SELECT * into mdFROM zd IN 'E:\fz\高阳\大姚\fz\bz\b ...
随机推荐
- OC学习篇之---第一个程序HelloWorld
从这篇开始我们就开始学习OC的相关知识了,在学习之前,个人感觉需要了解的其他的两门语言:一个是C/C++,一个是面向对象的语言(当然C++就是面向对象,不过这里最好还是Java).在干活之前,得先找到 ...
- Shiro的Filter机制详解---源码分析(转)
Shiro的Filter机制详解 首先从spring-shiro.xml的filter配置说起,先回答两个问题: 1, 为什么相同url规则,后面定义的会覆盖前面定义的(执行的时候只执行最后一个). ...
- percona-toolkit源码编译安装
安装依赖软件yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMakeryum install perl-Time-HiRes perl-DB ...
- 数学之路-python计算实战(5)-初识numpy以及pypy下执行numpy
N .有用的线性代数.傅里叶变换和随机数生成函数.numpy和稀疏矩阵运算包scipy配合使用更加方便.NumPy(Numeric Python)提供了很多高级的数值编程工具,如:矩阵数据类型.矢量处 ...
- CSS Sprite的相关概念
原文 简书原文:https://www.jianshu.com/p/8ae3be23a642 大纲 1.什么是CSS Sprite 2.CSS Sprite的优点 3.CSS Sprite的缺点 4. ...
- FOJ (FZU) 1476 矩形的个数 排列组合。
http://acm.fzu.edu.cn/problem.php?pid=1476 Problem Description 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1* ...
- 特征点提取之Harris角点提取法
1. 特征点提取的意义 2.角点 3. Harris角点检測的基本原理 4.Harris角点检測算法的步骤 5.Harris角点提取算法设计 <span style="font-siz ...
- Lucene学习总结之一:全文检索的基本原理 2014-06-25 14:11 666人阅读 评论(0) 收藏
一.总论 根据http://lucene.apache.org/java/docs/index.html 定义: Lucene 是一个高效的,基于Java 的全文检索库. 所以在了解Lucene之前要 ...
- iOS View自定义窍门——UIButton实现上显示图片,下显示文字
“UIButton实现上显示图片,下显示文字”这个需求相信大家在开发中都或多或少会遇见.比如自定义分享View的时候.当然,也可以封装一个item,上边imageView,下边一个label.但是既然 ...
- ssion机制详解
ssion机制详解 ref:http://justsee.iteye.com/blog/1570652 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚sess ...