繁体   English   中英

C# async 和 await 中的异步编程

[英]Asynchronous programming in C# async and await

异步和线程有什么区别? 它在内部使用线程吗?

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

async只是一个 C# 关键字(VB.NET 中的Async ),它告诉编译器该方法可以成为延续。 只要找到合适的TaskAwaiter这通常与await关键字一起发生。

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

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

注意:引用new 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不一定是线程。 在这个例子中是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM