专业网站建设品牌,18年专业建站经验,服务6000+客户--广州松河
免费热线:400-963-0016
微信咨询
|
联系我们
扫二维码关注公众号
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
位置:
广州松河
>
技术支持
> c#中任务Task
c#中任务Task
来源:网络整理 时间:2023/2/14 0:32:41 共
3864
浏览
1.通过任务开启线程
1.1 创建Task对象
首先创建任务对象,任务对象调用Start()方法开启任务线程。
class Program
{
static void DownLoad(object str)
{
Console.WriteLine("DownLoad Begin ID = " + Thread.CurrentThread.ManagedThreadId + " " + str);
Thread.Sleep(1000);
Console.WriteLine("DownLoad End");
}
static void Main(string[] args)
{
//创建任务
Task task = new Task(DownLoad, "人民日报");
//启动任务
task.Start();
Console.WriteLine("Main");
Console.ReadKey();
}
}
运行结果
1.2 任务工厂TaskFactory
首先创建任务工厂,然后调用StartNew()方法开启任务线程。
class Program
{
static void DownLoad(object str)
{
Console.WriteLine("DownLoad Begin ID = " + Thread.CurrentThread.ManagedThreadId + " " + str);
Thread.Sleep(1000);
Console.WriteLine("DownLoad End");
}
static void Main(string[] args)
{
//创建任务工厂
TaskFactory taskFactory = new TaskFactory();
//开始新的任务
taskFactory.StartNew(DownLoad, "纽约时报");
Console.WriteLine("Main");
Console.ReadKey();
}
}
运行结果
2.连续任务
如果一个任务的执行依赖于另一个任务,即任务的执行有先后顺序。此时,我们可以使用连续任务。
task.ContinueWith(ReadNews)表示一个任务task结束后,才开始执行另一个任务。
class Program
{
static void DownLoad(object str)
{
Console.WriteLine("DownLoad Begin ID = " + Thread.CurrentThread.ManagedThreadId + " " + str);
Thread.Sleep(1000);
Console.WriteLine("DownLoad End");
}
static void ReadNews(Task obj)
{
Thread.Sleep(1000);
Console.WriteLine("Read News");
}
static void Main(string[] args)
{
Task task = new Task(DownLoad, "人民日报");
Task task2 = task.ContinueWith(ReadNews);
task.Start();
Console.ReadKey();
}
}
执行结果
3.任务的层次结构
在一个任务中可以启动子任务,两个任务异步执行。默认情况下,子任务(即由外部任务创建的内部任务)将独立于其父任务执行。使用TaskCreationOptions.AttachedToParent显式指定将任务附加到任务层次结构中的某个父级。
如果父任务执行完了但是子任务没有执行完,则父任务的状态会被设置为WaitingForChildrenToComplete,只有子任务也执行完了,父任务的状态才会变成RunToCompletion。
class Program
{
static void DownLoad(object str)
{
Console.WriteLine("Parent Begin ID = " + Thread.CurrentThread.ManagedThreadId + " " + str);
Task child = new Task(ChildWork, TaskCreationOptions.AttachedToParent);
child.Start();
Thread.Sleep(1000);
Console.WriteLine("Parent End");
}
static void ChildWork()
{
Console.WriteLine("Child begin");
Thread.Sleep(5000);
Console.WriteLine("Child end");
}
static void Main(string[] args)
{
Task task = new Task(DownLoad, "人民日报");
task.Start();
Thread.Sleep(2000);
Console.WriteLine(task.Status);
Thread.Sleep(4000);
Console.WriteLine(task.Status);
Console.ReadKey();
}
}
运行结果:
4.任务的执行结果
使用Task的泛型版本,可以返回任务的执行结果。
下面例子中的TaskWithResult的输入为object类型,返回一个元组Tuple<int, int>。
定义调用TaskWithResult的任务时,使用泛型类Task<Tuple<int, int>>,泛型的参数定义了返回类型。通过构造函数,传递TaskWithResult,构造函数的第二个参数定义了TaskWithResult的输入值。
任务完成后,通过Result属性获取任务的结果。
class Program
{
static Tuple<int, int> TaskWithResult(object obj)
{
Tuple<int, int> div = (Tuple<int, int>)obj;
Thread.Sleep(1000);
return Tuple.Create<int, int>(div.Item1 + div.Item2, div.Item1 - div.Item2);
}
static void Main(string[] args)
{
var task = new Task<Tuple<int, int>>(TaskWithResult, Tuple.Create<int, int>(8, 3));
task.Start();
Console.WriteLine(task.Result);
task.Wait();
Console.WriteLine("Result: {0} {1}", task.Result.Item1, task.Result.Item2);
Console.ReadLine();
}
}
执行结果:
版权说明:
本网站凡注明“广州松河 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
相关主题:
网页设计冬奥会视频制作
网页制作作业餐厅设计方案
新教材数学书网页设计
绿色极简网页排版设计
山东网页设计方案模板下载
企业网页设计首页推荐工具
汕头旅游网页设计模板推荐
网页设计图片茶叶文案说明
海洋环保网页设计教程视频
简单网页设计图片排版教程
·上一条:
C#Task异步编程
|
·下一条:
对于sqldependency类的使用(通过它来监听数据库的变化)
同类资讯
幻侣指纹锁说明书_服务器
什么是英雄联盟_服务器
当用户在浏览器中输入一个网址之后_服务器
如何召唤骷髅_java
dispatchtouchevent和onintercepttouche
你觉得建筑学专业的学生学c语言好还是Python好_java
myeclipse为什么java包红叉_java
迭呈解释_java
geany好用吗_java
无现金社会的发展趋势英语作文_java
是否已经接近极限_java
我们日常接触到的软件有多少用了Java_java
dellemc服务器怎么开机_服务器
recovery蓝屏怎么开机_java
骁龙625相当于麒麟多少处理器_java
ftp文件夹怎么使用_服务器
hp服务器内存是什么意思_服务器
远程桌面卡死怎么重启_服务器
OUTLOOK怎么查看现有帐号邮件服务器_服务器
bin目录下的server是表示什么_服务器
资讯动态
公司新闻
互联网资讯
电商资讯
优化推广
技术支持
关于我们
公司简介
企业文化
服务项目
公司新闻
服务项目
网站建设
网站推广
品牌策划
移动应用
服务支持
在线咨询
服务流程
产品报价
售后服务
联系我们
代理加盟
付款方式
在线留言
联系方式
联系方式
电话:400-963-0016
邮箱:sales@itwy.com
QQ:250211130
微信:18520775521
Copyright © 广州松河信息科技有限公司 2005-2026 版权所有
粤ICP备16019765号
广州松河信息科技有限公司 版权所有
18520775521
QQ洽谈
sales@itwy.com