温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#中的Task怎么理解

发布时间:2021-11-24 13:37:50 来源:亿速云 阅读:302 作者:iii 栏目:大数据

本篇内容介绍了“C#中的Task怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Thread与Task区别

  1. 任务可以返回结果 , 没 有直接的机制可以从 线程返回结果。
  2. 任务通过使用取消令牌来支持取消, 但是线程没有。
  3. 一个任务可以同时执行多个线程, 线程一次只能运行一个任务。
  4. 可以使用async和await关键字轻松实现异步。
  5. 新的Thread不处理线程池线程,而Task确实使用线程池线程。
  6. 任务是比线程更高层次的概念。

Task

.NET框架提供Threading.Tasks类,我们可以创建任务并异步运行它们,任务是代表应该完成的某些工作的对象。该任务可以告诉我们工作是否完成,并且操作返回结果,那么任务将为我们提供结果。

C#中的Task怎么理解

深入思考Task

Thread是基于操作系统级别的线程,而ThreadPool和Task不会创建自己的操作系统线程,二者是由任务调度器(TaskScheduler)执行,默认的调度程序仅仅在ThreadPool上运行,与ThreadPool不同,Task可以在指定时间返回完成结果,并且还可以通过ContinueWith延续任务,以使得任务执行完毕后运行更多操作,如果已完成立即进行回调,也可以调用Wait来同步等待任务完成,如同Thread.Join一样阻塞线程执行,直到任务完成

重点来了

由于任务在ThreadPool上运行,因此创建不加任何选项的默认Task并不适用于执行长时间的操作,因为它们可能会将系统默认的线程池给填满导致其他操作的线程阻塞,但是Task提供了LongRunning选项,设置此项后,告诉任务调度器(TaskScheduler)启动新的线程,而不是在ThreadPool上运行

var task = Task.Factory.StartNew(() => ("Hello World"), TaskCreationOptions.LongRunning);

Console.WriteLine(task.Result);

任务和线程之间的最主要区别之一是异常的传播。在使用线程时,如果我们在长时间运行的方法中获得异常,则不可能在父函数中捕获该异常,但是如果我们在使用任务,则很容易捕获该异常。

“C#中的Task怎么理解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI