首页 新闻 会员 周边 捐助

在c#中 长时间任务选择Thread还是Task

0
悬赏园豆:50 [已解决问题] 解决于 2019-07-22 18:55

有多个长时间的任务,任务数量固定,其生命周期跟随程序,任务的具体内容大概是while循环中处理各种业务,请问选用Thread还是Task比较好,单核和多核对其性能有影响嘛?

niechangxu的主页 niechangxu | 初学一级 | 园豆:69
提问于:2019-07-22 15:49
< >
分享
最佳答案
1

根据场景和需要来,确定的独占的可以选择Thread 和Task,可变的不确定的任务池选择Task或者ThreadPool。

从写法上说,Task最简单方便,Task是对线程的进一步封装,本质上都是线程。

收获园豆:25
花飘水流兮 | 专家六级 |园豆:13617 | 2019-07-22 17:58
其他回答(5)
0

推荐用Task,Task其实是对Thread还有线程池的进一步封装。用Task不容易出错,而且编码很方便

收获园豆:15
会长 | 园豆:12463 (专家六级) | 2019-07-22 15:52
0

Task,一般项目中的任务都用Task,统一管理

收获园豆:10
小光 | 园豆:1766 (小虾三级) | 2019-07-22 16:18
2

Task 和 Thread 原则上都是 可以实现新建一个线程或者从线程池获取线程来执行,没有哪个更好的说。
不过更建议Task,因为它属于比较新的sdk,提供了更多的选项支持
例:
Task.Factory.StartNew 方法 有个枚举参数 TaskCreationOptions,可以设置 TaskCreationOptions.LongRunning

gt1987 | 园豆:1150 (小虾三级) | 2019-07-25 09:15
0

Task 线程池
Thread 线程
Task线程池能重复利用线程,减少内存开销

木狼 | 园豆:206 (菜鸟二级) | 2019-08-06 15:42
0

Task是任务,它的执行是由线程去执行的(没标注情况下是由线程池的线程),而且他可以随时掌握执行的状态。而你的线程就是你自己创建的线程了,但是没有可以掌握的状态。再说单双核,就要提到CPU和时间片。单核绝对不可能实现并行。您不说业务场景,没法推荐。如果你决定用task建议你表明你是长时间运行的task

拓拓龙 | 园豆:210 (菜鸟二级) | 2019-11-15 15:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册