任务Task、先后任务
Task类似后台线程。
using System;
using System.Threading;
using System.Threading.Tasks;//引用命名空间 namespace ConsoleApplication3
{
class Program
{
void DownloadFile()
{
Console.WriteLine("任务开始" );
Thread.Sleep();
Console.WriteLine("任务结束");
}
static void Main(string[] args)
{
Program p = new Program();//类的对象,方便引用非静态成员
Task t = new Task(p.DownloadFile);//创建任务
t.Start();
//TaskFactory tf = new TaskFactory();//任务工厂,方便创建多个Task
//Task t = tf.StartNew(p.DownloadFile);
//Task t1 = tf.StartNew(p.DownloadFile);
//Task t2 = tf.StartNew(p.DownloadFile); Console.ReadKey();
}
}
}
先后任务:一个任务依赖于另一个任务。即有先后顺序。使用ContinueWith
后继任务,方法参数不可省略,类似线程池
using System;
using System.Threading;
using System.Threading.Tasks;//引用命名空间 namespace ConsoleApplication3
{
class Program
{
void DoFirst()
{
Console.WriteLine("任务1开始" );
Thread.Sleep();
}
void DoSecond(Task a)//后继任务,参数不可省略,类似线程池
{
Console.WriteLine("任务2开始");
Thread.Sleep();
}
void DoThird(Task a)
{
Console.WriteLine("任务3开始");
Thread.Sleep();
}
static void Main(string[] args)
{
Program p = new Program();//类的对象,方便引用非静态成员
Task t1 = new Task(p.DoFirst);//任务1
Task t11 = t1.ContinueWith(p.DoSecond);//任务1结束后,异步执行后继任务2、3
Task t12 = t1.ContinueWith(p.DoThird);
Task t111 = t11.ContinueWith(p.DoSecond);//任务2结束后,才执行 t1.Start(); Console.ReadKey();
}
}
}
一个任务A中启动一个新任务B,两个任务异步执行,可认为同时执行。
using System;
using System.Threading;
using System.Threading.Tasks;//引用命名空间 namespace ConsoleApplication3
{
class Program
{
void DoFirst()//2s
{
Console.WriteLine("任务1开始");
Task t2 = new Task(DoSecond);//任务1中启动了任务2
t2.Start();//异步执行,可以认为1、2同时启动
Thread.Sleep();
Console.WriteLine("任务1结束");
}
void DoSecond()//5s
{
Console.WriteLine("任务2开始");
Thread.Sleep();
Console.WriteLine("任务2结束");
}
static void Main(string[] args)
{
Program p = new Program();//类的对象,方便调用成员
Task t1 = new Task(p.DoFirst);//任务1启动
t1.Start();
Console.ReadKey();
}
}
}
更深入内容参考:
https://blog.csdn.net/qq3401247010/article/details/81542461
https://blog.csdn.net/EthanWhite/article/details/52171262
任务Task、先后任务的更多相关文章
- Concepts:Request 和 Task
当SQL Server Engine 接收到Session发出的Request时,SQL Server OS将Request和Task绑定,并为Task分配一个Workder.在TSQL Query执 ...
- .Net多线程编程—任务Task
1 System.Threading.Tasks.Task简介 一个Task表示一个异步操作,Task的创建和执行是独立的. 只读属性: 返回值 名称 说明 object AsyncState 表示在 ...
- nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...
- windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...
- Openstack Periodic Task
Openstack Periodic Task 周期性任务在各个模块的manager.py(computer,scheduler,cell,network)中添加. 添加方法:在模块manager类实 ...
- MapReduce剖析笔记之三:Job的Map/Reduce Task初始化
上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...
- [Java定时器]用Spring Task实现一个简单的定时器.
今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...
- 定时管理器框架-Task.MainForm
入住博客园4年多了,一直都是看别人的博客,学习别人的知识,为各个默默无私贡献自己技术总结的朋友们顶一个:这几天突然觉得是时候加入该队列中,贡献出自己微弱的力量,努力做到每个月有不同学习总结,知识学习的 ...
- Task三个列子的分享
这次要分享的是C#Task任务的几个列子,感觉最实用的是封装的分页任务执行方法,这个方法步奏也是目前在我工作中执行多任务常用的,不知道各位也有这用的情况,那么开始吧. 1.顺序任务执行 //顺序任务执 ...
- webapi+Task并行请求不同接口实例
标题的名称定义不知道是否准确,不过我想表达的意思就是使用Task特性来同时请求多个不同的接口,然后合并数据:我想这种场景的开发对于对接过其他公司接口的人不会陌生,本人也是列属于之内,更多的是使用最原始 ...
随机推荐
- 使用PowerShell 修改hosts
直接上代码 # author:lttr <www.cnblogs.com/GoCircle> # date:2019-08-09[CmdletBinding()] param ( [Par ...
- MySQL数据类型 约束
一.数据库CDGS. 库 增 create database 库名; 删 drop 库名; 改 alter database 库名称 修改的属性名称; 查 show databases;#查看 ...
- Java switch case 语句
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 语法 switch(expression){ case value : //语句 break; //可选 ca ...
- 使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别
GitHub:https://github.com/pengcao/chinese_ocr https://github.com/xiaofengShi/CHINESE-OCR |-angle 基于V ...
- Spring 中的bean 是线程安全的吗?
结论: 不是线程安全的 Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体sco ...
- C#中static修饰符的作用
static在C#中表示的是静态的,比如一个静态的字段是归类型所有,而非归对象所有,也就是说,在调用这个字段时,只能用类型去调,而不能用对象. 实例字段时随着对象创建而创建,对象销毁而销毁,而静态字段 ...
- linux查看端口被占用情况
Linux 查看端口占用情况可以使用 lsof 和 netstat 命令. 如果linux中没有这两个命令,则yum安装一下 yum install -y lsof yum install -y ne ...
- java知识点复习(1):
1.java整形变量078:在java数字里数字表达式前面加上0表示8进制,因为8进制里表示数字只有0-7,所以这里的表达式有错误.相对而言,077就是合法的,转换成10进制就是63(7*8+7=63 ...
- 10 Scrapy框架持久化存储
一.基于终端指令的持久化存储 保证parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的形式写入指定格式的文件中进行持久化操作. 执行输出指定格式进行存储:将爬取到的 ...
- Hadoop网页监控配置
接之前的内容http://www.cnblogs.com/jourluohua/p/8734406.html 在之前那的内容中,仅实现了Hadoop的安装和运行,距离实际使用还有很远.现在先完成一个小 ...