C#中的异步编程异步并等待

时间:2019-01-13 03:38:15

标签: c# asynchronous

asyn和线程有什么区别? 它内部使用线程吗?

1 个答案:

答案 0 :(得分:1)

Thread实际的线程可能已启动并在您的应用程序中的代码上运行。

async只是一个C#关键字(在VB.NET中为Async),它告诉编译器该方法可以成为延续。只要找到正确的awaitTaskAwaiter关键字通常就会发生这种情况。

async awaitThread不同,但使用两者通常具有相似的逻辑。

使用Thread,您可以引用并调用它来执行任何委派的工作。线程将一直运行,直到委托工作完成或引发错误。

注意:引用new Thread与从应用程序线程池中提取一个不同。默认情况下,当您引用new Thread时,即使您结束应用程序,也允许它保持进程活动(因此请妥善管理它们。)理想情况下,大多数应用程序线程应从应用程序线程池中拉出。线程池线程的性能更好,仅仅是因为它们通常已经被分配并且可以重用。它们还将在主线程(应用程序线程)结束时结束,从而允许进程结束。

new ThreadThreadPool的示例

//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不必是线程。在此示例中。