【发布时间】:2026-01-17 01:25:02
【问题描述】:
在阅读 C# 中的多线程(来自 MSDocs 和 Stephen Cleary 的 Concurrency in C# 之类的书籍)时,我反复遇到的建议基本上归结为:线程是较旧的、低级别的抽象被Task 和Task<T> 类取代的并发。
现在我了解到任务级别更高、功能更丰富、功能更强大,并且几乎可以执行线程以前用于异步和并行性的任何事情。
我的问题是:有什么线程可以做的,新的 Task 和 Task<T> 等不能做,所以我花时间学习多线程以防万一遇到这些用例?
【问题讨论】:
-
Task/Task<T>涉及在多种情况下在幕后创建Thread。前者只是为后者精心设计的包装器,这使得正确使用多线程变得更加简单。如果您想真正了解一切是如何工作的,请从 Threads 开始,看看它们使用起来有多痛苦,然后切换到了解 Tasks、何时以及如何使用它们(尤其是在async/@ 987654336@). -
这非常正确,是的。您永远不应该在常见的 LOB 应用程序中需要线程。当你对线程的生命周期和其他方面有严格的要求时,你会回到线程。通常,您只能使用
async和await构建完整的应用程序(正确完成,阅读 Stephen Cleary 的 * 帖子和他的博客以获取更多信息) -
如果我想更改 Thread.Priority 或处理器关联/IO 优先级(使用 pinvoke)或设置 AppartmentState,我会使用线程而不是任务或线程池线程。跨度>
-
Is there anything that threads can do它们允许您可靠地启动一个新线程。那有用吗?不常见,不。
标签: c# multithreading asynchronous .net-core concurrency