1.wait

using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
//阻塞 wait 有点像thread的join 作用是Task执行完 这个wait之后的代码才可以执行
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait");
});
t1.Start();
t1.Wait();
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}

2.WaitAll

using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start(); Task.WaitAll(t1, t2);
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}

先输出  我是wait2 再输出 我是wait1  最后输出 我是主线程

3.WaitAny

using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start(); Task.WaitAny(t1, t2);
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}

先输出  我是wait2 再输出 我是主线程  最后输出 我是wait1

4 whenAll +延续

using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start(); Task.WhenAll(t2, t1).ContinueWith(t3=> {
Console.WriteLine("我是t3,一个新的线程");
});
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}

我是主线程

我是wait2
我是wait1
我是t3,一个新的线程

5 whenAny +延续

using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start();
//跟上一个代码的区别是 上一个是whenAll 这个是whenAny
Task.WhenAny(t2, t1).ContinueWith(t3=> {
Console.WriteLine("我是t3,一个新的线程");
});
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}

我是主线程
我是wait2
我是t3,一个新的线程
我是wait1

6 Task.Factory的whenAll阻塞和延续

using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start();
//注意的是 这里是factory 上面两个线程也要start
Task.Factory.ContinueWhenAll(new Task[] { t1, t2 }, t =>
{
Console.WriteLine("factory 中的when All");
});
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}

我是主线程
我是wait2
我是wait1
factory 中的when All

7 Task.Factory的whenAny阻塞和延续

using System;
using System.Threading;
using System.Threading.Tasks; namespace 多线程_List
{
class Program
{
static void Main(string[] args)
{
//Task中的延续和7种阻塞
Task t1 = new Task(()=> {
Thread.Sleep();
Console.WriteLine("我是wait1");
});
t1.Start(); Task t2 = new Task(() => {
Thread.Sleep();
Console.WriteLine("我是wait2");
});
t2.Start();
//注意的是 这里是factory 上面两个线程也要start
Task.Factory.ContinueWhenAny(new Task[] { t1, t2 }, t =>
{
Console.WriteLine("factory 中的when Any");
});
Console.WriteLine("我是主线程");
Console.ReadKey(); } }
}

我是主线程
我是wait2
factory 中的when Any
我是wait1

2 Task中的延续和7种阻塞的更多相关文章

  1. C#中实现并发的几种方法的性能测试

    C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...

  2. Android中实现定时器的四种方式

    第一种方式利用Timer和TimerTask 1.继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(task, delay,period); ...

  3. C# Task中的Func, Action, Async与Await的使用

    在说Asnc和Await之前,先说明一下Func和Action委托, Task任务的基础的用法 1. Func Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate, ...

  4. 在Android开发中,定时执行任务的3种实现方法

    在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式)二.采用Handler的postDelayed(Runn ...

  5. 微软BI 之SSIS 系列 - 理解Data Flow Task 中的同步与异步, 阻塞,半阻塞和全阻塞以及Buffer 缓存概念

    开篇介绍 在 SSIS Dataflow 数据流中的组件可以分为 Synchronous 同步和 Asynchronous 异步这两种类型. 同步与异步 Synchronous and Asynchr ...

  6. 微软BI 之SSIS 系列 - Execute SQL Task 中的 Single Row 与 Full Result Set 的处理技巧

    开篇介绍 Execute SQL Task 这个控件在微软BI ETL 项目中使用的频率还是非常高的,也是大部分入门 SSIS 初学者最早接触到的几个控制流控件. 我们通常使用 Execute SQL ...

  7. javaSE中JDK提供的四种线程池

    对javaSE中JDK提供的四种线程池稍作整理   一.Executor   package java.util.concurrent; /** * @since 1.5 * @author Doug ...

  8. 编写高质量代码改善C#程序的157个建议——建议85:Task中的异常处理

    建议85:Task中的异常处理 在任何时候,异常处理都是非常重要的一个环节.多线程与并行编程中尤其是这样.如果不处理这些后台任务中的异常,应用程序将会莫名其妙的退出.处理那些不是主线程(如果是窗体程序 ...

  9. ASP.Net Core中处理异常的几种方法

    本文将介绍在ASP.Net Core中处理异常的几种方法 1使用开发人员异常页面(The developer exception page) 2配置HTTP错误代码页 Configuring stat ...

随机推荐

  1. 【习题 5-6 UVA-1595】Symmetry

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每一个y坐标的点都找中点. 看看中点是不是都一样就好. [代码] #include <bits/stdc++.h> us ...

  2. eclipse config 2 tab -&gt; space

    编码规范要求不同意使用tab,可是又要有4个字符的缩进,连点4次space,这不是程序猿的风格 来看看 eclipse 设置一次tab像space的转换 例如以下操作 Window->Prefe ...

  3. css3-13 css3的3D动画如何实现

    css3-13 css3的3D动画如何实现 一.总结 一句话总结:这里是transform+setInterval实现.transform属性里面的rotate属性值变成rotateX或rotateY ...

  4. hdu 4406 费用流

    这题问题就是当前时刻究竟选择哪门课程,易知选择是和分数有关的,而且是一个变化的权值,所以能够用拆点的方式,把从基础分到100分都拆成点.但若这样拆点的话,跑费用流时就必须保证顺序.这样就麻烦了..观察 ...

  5. diff_mysql_table_exec.py

    #!/usr/bin/env python #-*- encoding: utf8 -*- import mysql.connector import sys import re import dat ...

  6. swift学习第一天:认识swift以及swift的常量和变量

    一:认识swift // 1.导入框架 //#import <UIKit/UIKit.h> import UIKit // 2.定义一个标识符 // int a = 10; // swif ...

  7. html5 在移动端的缩放控制

    viewport 语法介绍: 01 <!-- html document --> 02 <meta name="viewport" 03     content= ...

  8. html5-7 html5语义标签和视频

    html5-7  html5语义标签和视频 一.总结 一句话总结:设计网站的时候要兼顾早期浏览器的话,最新技术要缓着用,自己可以先尝试. 1.html5所有标签共有属性有哪四种? 1.id2.clas ...

  9. Thinking in UML 学习笔记(二)——UML核心视图之用例图

    在UML中,需求模型又称为用例模型,它主要用于描述系统的功能性需求,即软件可以实现的功能,如登录.注册.入库.出库.查看库存报表.增加员工信息等.常规的用例建模一般包括两个组成部分:绘制用例图和编写用 ...

  10. css 弹性盒模型Flex 布局

    参考文章:http://www.runoob.com/w3cnote/flex-grammar.html Flex 布局是什么:采用Flex布局的元素,称为Flex容器(flex container) ...