博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
任务Task、先后任务
阅读量:5014 次
发布时间:2019-06-12

本文共 2552 字,大约阅读时间需要 8 分钟。

Task类似后台线程。

using System;using System.Threading;using System.Threading.Tasks;//引用命名空间namespace ConsoleApplication3{    class Program    {        void DownloadFile()        {            Console.WriteLine("任务开始" );            Thread.Sleep(2000);            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(2000);        }        void DoSecond(Task a)//后继任务,参数不可省略,类似线程池        {            Console.WriteLine("任务2开始");            Thread.Sleep(2000);                    }        void DoThird(Task a)        {            Console.WriteLine("任务3开始");            Thread.Sleep(2000);        }        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(2000);            Console.WriteLine("任务1结束");        }        void DoSecond()//5s        {            Console.WriteLine("任务2开始");            Thread.Sleep(5000);            Console.WriteLine("任务2结束");        }        static void Main(string[] args)        {            Program p = new Program();//类的对象,方便调用成员            Task t1 = new Task(p.DoFirst);//任务1启动                      t1.Start();            Console.ReadKey();        }    }}

更深入内容参考:

转载于:https://www.cnblogs.com/xixixing/p/10850552.html

你可能感兴趣的文章
[Scrum]2010/12/28 —— 第一天!
查看>>
ASP.NET MVC模式 温习(一)排除MVC模式误区
查看>>
Mysql的read_only 只读属性说明 (运维笔记)
查看>>
DOCKER 从入门到放弃(五)
查看>>
Python 多线程学习
查看>>
appcan官方ajax
查看>>
获取NVIDIA显卡的温度
查看>>
Dijkstra算法
查看>>
Deep Learning 9: Performance
查看>>
面试题61 把二叉树打印成多行
查看>>
C#例子 易懂故事 接口 委托 事件 异步通知 好玩.
查看>>
[转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...
查看>>
修改presto新版源码让他支持redash数据库
查看>>
Javascript的书写位置
查看>>
树-线索二叉树
查看>>
JAVA遇见HTML——Servlet篇:Servlet基础
查看>>
第二章 Vue快速入门--20 品牌案例-完成品牌列表的添加功能+ 21 品牌案例-根据Id完成品牌的删除...
查看>>
Java单例模式
查看>>
重温WCF之消息契约(MessageContract)(六)
查看>>
Excel2007制作直方图和正态分布曲线图
查看>>