专业网站建设品牌,18年专业建站经验,服务6000+客户--广州松河
免费热线:400-963-0016
微信咨询
|
联系我们
扫二维码关注公众号
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
位置:
广州松河
>
技术支持
> c#中任务Task
c#中任务Task
来源:网络整理 时间:2023/2/14 0:32:41 共
3870
浏览
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();
}
}
执行结果:
版权说明:
本网站凡注明“广州松河 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
相关主题:
HR网站制作美食素材视频
社会论文网站设计制作小学
楼兰小说网站制作流程视频
击剑网站制作头像素材动漫
99购物网站制作流程视频
繁星伴奏制作视频网站电脑
钢材网站制作雪糕推荐好吃
大同网站制作蛋糕图片高级
库素材网站视频制作模板
天山网站分享歌单制作模板
·上一条:
C#Task异步编程
|
·下一条:
对于sqldependency类的使用(通过它来监听数据库的变化)
同类资讯
杭州女生学html5难学吗_js/jQuery
小程序属于网页吗_vue
以前搜索过的网页现在怎么能找到_js/jQuery
动态扩展组件是什么_vue
12位AD转换器有哪些_js/jQuery
vue中name和areas的用法_vue
西安动物园门票预约官网_vue
怎么把照片合成小视频_vue
现在做前端是不是一定要会开发小程序啊_vue
录制视频用的什么录音软件_vue
vue中的log是什么意思_vue
iphone11延时摄影怎么调速度_vue
vue是开发语言吗_vue
jquery大小写区别_js/jQuery
vue和flutter哪个值得学习_vue
比如我某个时间要做什么记录下来_js/jQuery
JS插件如何使用_js/jQuery
data对象的属性和方法_vue
如何做地图定位_js/jQuery
什么叫语义库_js/jQuery
资讯动态
公司新闻
互联网资讯
电商资讯
优化推广
技术支持
关于我们
公司简介
企业文化
服务项目
公司新闻
服务项目
网站建设
网站推广
品牌策划
移动应用
服务支持
在线咨询
服务流程
产品报价
售后服务
联系我们
代理加盟
付款方式
在线留言
联系方式
联系方式
电话:400-963-0016
邮箱:sales@itwy.com
QQ:250211130
微信:18520775521
Copyright © 广州松河信息科技有限公司 2005-2026 版权所有
粤ICP备16019765号
广州松河信息科技有限公司 版权所有
18520775521
QQ洽谈
sales@itwy.com