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 ...
随机推荐
- 再谈ITFriend网站的定位
在网站开发阶段.内部测试阶段.公开测试阶段,让诸多好友和网友,参与了我们的网站ITFriend的体验和测试.其中,大家非常关心,我们的网站是干什么的.在我们不做任何解释的情况下,有的网站认为ITFri ...
- [Nuxt] Add Arrays of Data to the Vuex Store and Display Them in Vue.js Templates
You add array of todos to the store simply by adding them to the state defined in your store/index.j ...
- zeros() 函数——MATLAB
zeros函数——生成零矩阵 ones函数——生成全1阵 [zeros的使用方法] B=zeros(n):生成n×n全零阵. B=zeros(m,n):生成m×n全零阵. B=zeros([m n]) ...
- HASH算法具体解释
做了几年开发,一直不理解HASH算法的原理.今天偶从百度知道上看到一个牛人神一样的理解: 这个问题有点难度.不是非常好说清楚. 我来做一个比喻吧. 我们有非常多的小猪,每一个的体重都不一样,假设体重分 ...
- UI组件之TextView及其子类(三)ToggleButton和Switch
ToggleButton.Switch.CheckBox和RadioButton都是继承自android.widget.CompoundButton,意思是可选择的,因此它们的使用方法都非常类似. C ...
- UE4制作插件的插件神器pluginCreator
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/45644007 作者:car ...
- [转] Python 爬虫的工具列表 附Github代码下载链接
转自http://www.36dsj.com/archives/36417 这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests - ...
- ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码
转自原文 ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码 #region 校验合法性 ArrayList pFeatureArray = nul ...
- sourceinsight4
转载 http://bbs.pediy.com/thread-215669.htm 如果你觉得软件有用,请购买正版.发布这个纯属娱乐. 转载请注明出处,谢谢! 仅修改了程序中用于License签名验证 ...
- 【codeforces 762A】k-th divisor
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...