.net 在线程上调用方法、使用异步编程模型处理任务和使用BackgroundWorkerThread之间的基本区别是什么

.net 在线程上调用方法、使用异步编程模型处理任务和使用BackgroundWorkerThread之间的基本区别是什么,.net,multithreading,.net,Multithreading,我理解多线程的基本用途。我还知道,我们可以使用异步编程模型、BackgroundWorkerComponent,或者简单地在另一个线程上调用任务来实现并发性。但我不理解这三种实现并发的方法之间的基本区别。谁能告诉我清楚一点吗。 提前感谢。使用异步编程模型或BackgroundWorker组件,您将使用两种不同的模型(API)在线程池线程上运行代码 BackgroundWorker的模型相当简单,但非常适合某些类型的任务。BackgroundWorker遵循(过时的)(EAP)。一般来说,我更喜欢

我理解多线程的基本用途。我还知道,我们可以使用异步编程模型、BackgroundWorkerComponent,或者简单地在另一个线程上调用任务来实现并发性。但我不理解这三种实现并发的方法之间的基本区别。谁能告诉我清楚一点吗。
提前感谢。

使用异步编程模型或BackgroundWorker组件,您将使用两种不同的模型(API)在线程池线程上运行代码

BackgroundWorker的模型相当简单,但非常适合某些类型的任务。BackgroundWorker遵循(过时的)(EAP)。一般来说,我更喜欢APM,除非该任务非常适合后台工作人员

使用线程池是有利的,因为创建线程有一定的开销(例如为线程分配堆栈空间等)

当您自己创建线程时,您没有使用线程池线程(除非您调用适当的API来访问线程池)。因此,您需要支付创建线程的成本。如果您的线程运行时间相当长,那么这样做是合理的,因为成本是在线程的生命周期内分摊的,并且您没有消耗有限的线程池线程之一

我要指出,你的问题没有提到

基于任务的异步模式(TAP)


这是所有新开发的建议。

谢谢Eric,现在我对不同的线程模型有了更好的了解。