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 ...
随机推荐
- 2、opencv2.4.13.6安装
一. 卸载opencv3.3.0: Going to the "build" folder directory of opencv from terminal, and execu ...
- static 静态
摘自:https://blog.csdn.net/Kendiv/article/details/675941 关于static的 ""记忆性"" 我们可以用做 ...
- 问题:CListCtrl如何高亮选中一行 http://zhidao.baidu.com/question/100664911.html 扩展:单行、双行及完成状态的字体等等。。。
http://zhidao.baidu.com/link?url=BKp05mfOdKbEBh21svQelpVhYjzDkIpYUZay8_3ZLSndTQn5kK0eTwQG8jBvYnwh8US ...
- [RxJS] Replace zip with combineLatest when combining sources of data
This lesson will highlight the true purpose of the zip operator, and how uncommon its use cases are. ...
- Spring Boot+Mybatis+Pagehelper分页
Spring Boot 集成MyBatis和Pagehelper分页插件 mybatis-spring-boot-starter依赖树如下: pom配置 <project xmlns=" ...
- [Angular] Test Directive
directive: import { Directive, HostListener, HostBinding, ElementRef } from '@angular/core'; @Direct ...
- 修改Linux中的用户名 分类: B3_LINUX 2014-07-24 11:40 440人阅读 评论(0) 收藏
需要修改2个文件: /etc/hosts /etc/sysconfig/network 然后重启 1.修改/etc/sysconfig/network NETWORKING=yes HOSTNAME= ...
- CGI原理解析之二------WEB服务和CGI交互数据
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/wait.h ...
- css3 实现水晶按钮
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee432e), color-sto ...
- todo bitnami
https://bitnami.com/stack/dokuwiki https://bitnami.com/stack/jenkins/installer