问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C# Task使用方法

发布网友 发布时间:2024-09-27 09:17

我来回答

1个回答

热心网友 时间:2024-10-20 13:11

在C#中,任务(Task)是线程的进一步抽象,使用任务可以简化线程的管理,绕过一些琐事。首先,我们从创建线程开始。创建线程非常简单,可以新建一个Thread类,传入一个ThreadStart委托(无参数返回void),然后调用Start方法。然而,线程在执行完委托后就结束了,因此需要一种方法在创建的线程中继续执行代码。一种实现方式是构建一个委托的栈(也可以使用队列、链表等),在创建的线程中轮询栈中是否有未完成的委托,若有则取出并执行委托。只要向栈中添加委托,它们就会在创建的线程中运行。

接下来是任务(Task)的介绍。任务是对前面操作的封装,包含了要运行的委托以及将委托放入线程运行的封装。任务通常被放置在线程池中运行,并且是后台线程。主线程结束时,并不会管后台线程是否运行,因此调用thread.sleep方法让后台线程有时间完成任务。

然后是async/await关键字,它们表示什么?其实很简单,前面我们调用了task.Start,但并不知道任务何时结束。我们可以调用回调函数表示任务完成,而async/await则简化了这一过程,await相当于在任务结束后调用回调的过程,避免了回调的麻烦。值得注意的是,在await任务结束后,依然在线程池中运行,与回调情形一致,这也是await可以避免线程阻塞的原因。

在实现任务时,有时任务可能包含其他任务。任务有几种类型,包括未开始的任务、混合任务、使用async关键字的任务等。未开始的任务不符合规范,通常需要调用Start或者直接使用await。混合任务可能在调用线程中运行部分代码,而返回一个运行中的任务。async关键字的任务在使用时,编译器会提示使用await关键字,因为它们使用了await开启了任务,使得方法内部await之后的语句不一定在该方法开始时的线程范围内,因此需要在方法外部使用await关键字。

任务的开启方法主要有Task.Run和TaskFactory.StartNew。Task.Run实际上是TaskFactory.StartNew的封装,对返回的task进行进一步处理,返回一个单独的task,不需要手动await。

对于任务的其他方法,如Task.Wait()、Task.RunSynchronously、Task.ContinueWith、Task.WhenAny和Task.WhenAll,分别用于等待任务完成、在当前线程运行任务、在任务完成时执行后续操作、等待任意任务完成和等待所有任务完成。

任务的取消机制对于长时间任务尤为重要,可以使用CancellationTokenSource。取消任务的机制是轮询是否被取消,但不是即时的,也不适用于单个长时间操作。传递token而不是本身的原因是为了控制取消机制的封装,遵循设计原则。

在捕获异常时,无论在哪种线程抛出异常,都会在该线程中捕获。后台线程的异常不会导致程序停止运行,但异常捕获的具体方法可能需要特定配置,这里暂时忘记了具体步骤,日后会再查找。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2024年云南292分能考上什么大学? 2024高考多少分能被焦作大学录取 【芍药花茶】芍药花茶的功效与作用 芍药花茶怎样喝 芍药花茶的介绍 芍药花茶的属性和功效 联想拯救者电竞手机Pro评测 植物大战僵尸花园战争有用的激活码发给我,有用我就采纳 亲亲奶爸《亲亲奶爸》歌词 植物大战花园战争激活码只能用一次? 歌词中带有。我的好爸爸。我的好爸爸。儿女怎能舍得让你走,_百度... edge浏览器没声音是怎么回事-edge浏览器没声音解决办法 C#程序发生异常时,我想程序不关闭而是弹出对话框提示详细信息,如堆栈信 ... 商标侵权找哪个部门投诉? C# 并行编程避坑指南之-Try Catch系列 商标侵权如何有效维权? 有关C#的异常处理程序代码,当未捕获线程异常时,如何手动捕获? 请各位... 苹果4S怎么打字没有搜狗拼音输入法,只有简体拼音,打字太慢还不好点 ... 股票里增值股什么意思 ...发现学生高某的作业本中夹了一封写有×××收的信件,吴老_百度... ...2008上半年的预备党员思想汇报 四篇 每篇2500字左右 广东居民生活用水标准 广州公寓民用水电费标准 安徽嘉宝诺生物科技有限公司怎么样? 加多宝放锅里加热烧过头了,瓶子都变形了。还能喝吗? 如何把手机里的图片备份上传到百度云 Android版的百度云,如何禁止将网络相册里的照片自动下载到手机中? 怎么看自己在网易云音乐中给别人的评论? 网易云云音乐动态在哪 网易云音乐个人动态如何查看-个人动态查看方法 已知z=u(x,y)乘以e的(ax+by)次方,且偏u方除以偏x偏y等于0,确定常数a和... ...开头是讲一个女生的,动画片名字只有一个字,希望大家帮忙想一下... 养盅是什么意思 c#出错,后面代码不执行了 也不抛异常。连try也不进。比如在线程里面执行... 品牌侵权怎么投诉? 我长痘痘有五年了,总是在额头、眉心、下巴长,脸上一点都没有。最近... 青岛滑翔伞多少钱一次 青岛金沙滩滑翔伞价格 七彩丹霞滑翔伞多少钱一个人 林虑山滑翔基地滑翔一次多少钱2024 我脸上长痘痘了,很幸运的是只在额头上,但是... 华为荣耀3c搜狐新闻是预装软件吗 财阀x刑警结局 哪有象字的成语有哪些? 口袋中心超级绿宝石抓迪奥西斯 ...早上起床觉得眼睛特别干,而且有很多眼屎,是不是我不适合戴呢?会不... 厨房的水槽漏水慢了怎么办 四个月小孩受凉咳嗽应该吃什么药 达里诺尔湖介绍 达里诺尔湖简介 业界公认的90年代“十大标杆茶”,92方砖、96紫大益、99绿大树...一篇... “普洱教父”白水清:我的普洱茶仓储经验谈 普洱老茶讲堂︱99易武绿星星:与99绿大树、99大渡岗齐名,独特“六叶草... 太原火车站怎么走