[英]Asynchronous programming in C# async and await
异步和线程有什么区别? 它在内部使用线程吗?
Thread
一个实际的线程可能会在您的应用程序的代码上启动并运行。
async
只是一个 C# 关键字(VB.NET 中的Async
),它告诉编译器该方法可以成为延续。 只要找到合适的TaskAwaiter
这通常与await
关键字一起发生。
async await
与Thread
但使用两者通常具有相似的逻辑。
使用Thread
您可以引用和调用它来执行任何委托的工作。 该线程将一直运行,直到委托的工作完成或引发错误。
注意:引用new 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
不一定是线程。 在这个例子中是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.