专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-963-0016
微信咨询
|
联系我们
扫二维码关注公众号
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
位置:
网站建设
>
技术支持
> c#中任务Task
c#中任务Task
来源:网络整理 时间:2023/2/14 0:32:41 共
3843
浏览
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();
}
}
执行结果:
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
相关主题:
兰州大学网页设计分析
春考技能网页设计优秀作品
web设计网页怎么做案例
三亚网页设计价格
搜索引擎导航网页设计
广之旅网页主页设计分享
宿州淘宝网页设计培训班
ps做网页设计分辨率
东站网页设计培训哪家专业
静安区网页设计服务费
·上一条:
C#Task异步编程
|
·下一条:
对于sqldependency类的使用(通过它来监听数据库的变化)
同类资讯
C#Task异步编程
C# Find()和First()与FirstOrDefault(
windows下搭建vue开发环境+IIS部署
vue开发项目详细教程(第一篇 搭建环境篇)
Vue常用经典开源项目汇总参考-海量
Vue环境搭建+VSCode+Win10
解决:'webpack-dev-server' 不是内部或外部命令,也不
C#教程之Threads(异步和多线程)
C#异步多线程之TASK
配置本地开发机器虚拟域名以及泛域名解析
微信企业付款开发 C#
企业微信开发之向员工付款(C#)
css3_背景颜色渐变写法
c# webapi POST 参数解决方法
Js /JQuery跨域:PUT/DELETE请求接口405错误;( O
C# http请求带请求头部分
[微信支付]C# .net 微信扫码支付Body含有中文导致出现“签名错
将webApp或者H5页面打包成App
.Net Core 2.2 发布IIS遇到的那些坑
jQuery头像裁剪插件 可缩放和旋转
资讯动态
公司新闻
互联网资讯
电商资讯
优化推广
技术支持
关于我们
公司简介
企业文化
服务项目
公司新闻
服务项目
网站建设
网站推广
品牌策划
移动应用
服务支持
在线咨询
服务流程
产品报价
售后服务
联系我们
代理加盟
付款方式
在线留言
联系方式
联系方式
电话:400-963-0016
邮箱:sales@itwy.com
QQ:250211130
微信:18520775521
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有
粤ICP备16019765号
广州京杭网络科技有限公司 版权所有
18520775521
QQ洽谈
sales@itwy.com