何时使用Task,何时使用Thread?

17

我刚刚问了一个关于任务的问题,但现在意识到我实际上想问一个更通用的问题。能否总结一下任务和线程的优缺点?如何理解何时应该使用任务或线程?


1
我在这里回答了一个类似的问题(但不完全相同)链接。希望对你有帮助。 - Adam Mihalcin
1
https://dev59.com/l2kx5IYBdhLWcg3wA_xS#sqGdEYcBWogLw_1bmmPz - dlev
14
首先要理解的是“任务”和“线程”的区别。“给我做个三明治”是一个任务,“雇佣一名厨师”则是创建一个线程。如果你混淆了这两件事情,那么你要么会雇佣许多不必要的厨师但却吃不掉他们做的食物,要么你会要求一堆三明治为你做晚餐。你决定使用任务还是线程的方式是,决定是否想代表代码中的任务,而不考虑谁来执行任务,或者你是否想代表执行任务的工作人员。 - Eric Lippert
4
它们是首选方法,因为它们重新聚焦代码以强调正在执行的任务而不是执行它们的工作者。线程代码的大多数问题都源于协调工作人员--线程的困难。如果你从事吃三明治的业务,最好能够说“我需要一百个三明治”,然后让任务库决定雇用多少厨师。 - Eric Lippert
https://dev59.com/mm855IYBdhLWcg3w0H13 - bytedev
显示剩余4条评论
1个回答

5
任务是以异步方式执行程序的指令。线程实际上是OS核心对象,用于执行所请求的操作。将任务视为一个聪明的线程聚合器/组织者,它“知道”在您的CPU上同时运行多少任务更好。它比常见的多线程实现更聪明(这就是为什么它是Microsoft推荐的选择)。它是一种帮助您更轻松地管理线程的功能。

还可以查看这里,可以给您关于您可能感兴趣的性能问题一些提示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接