asyn和线程有什么区别? 它内部使用线程吗?
答案 0 :(得分:1)
Thread
实际的线程可能已启动并在您的应用程序中的代码上运行。
async
只是一个C#关键字(在VB.NET中为Async
),它告诉编译器该方法可以成为延续。只要找到正确的await
,TaskAwaiter
关键字通常就会发生这种情况。
async await
与Thread
不同,但使用两者通常具有相似的逻辑。
使用Thread
,您可以引用并调用它来执行任何委派的工作。线程将一直运行,直到委托工作完成或引发错误。
注意:引用new Thread
与从应用程序线程池中提取一个不同。默认情况下,当您引用new Thread
时,即使您结束应用程序,也允许它保持进程活动(因此请妥善管理它们。)理想情况下,大多数应用程序线程应从应用程序线程池中拉出。线程池线程的性能更好,仅仅是因为它们通常已经被分配并且可以重用。它们还将在主线程(应用程序线程)结束时结束,从而允许进程结束。
new Thread
与ThreadPool
的示例
//Runs from application thread pool... Ends with process.
ThreadPool.QueueUserWorkItem((state) => { /* do some work */ });
//Allocates a new thread; by default runs until completed reaching UnhandledException keeping the process alive.
new Thread(new ThreadStart(() => { /* do some work */ })).Start();
现在,我们可以使用Task
来做到这一点,
//Runs from application thread pool... Ends with process.
new Task(() => { /* do some work */ }).Start();
您会注意到Task
与本示例中的ThreadPool.QueueUserWorkItem
类似,实际上它们在做什么方面非常相似。然而;不要太让您感到困惑,只需注意Task
不必是线程。在此示例中。