繁体   English   中英

async修饰符和await运算符与委托和线程有何不同?

[英]how is async modifier and await operator different from delegates and threading?

例如,在Winform中,当我们同步使用HttpWebRequest时,UI线程将被阻塞,这又会在Internet上请求资源。 在这里,我们可以使用async方法执行该方法,而某些任务的await关键字允许用户即使在请求仍在运行时也可以与winform进行交互。

这甚至可以通过委派来实现,那么异步功能的优点是什么?

异步和等待术语更加简单,您基本上可以编写代码,就像通过添加一些关键字来完成同步应用程序一样。

从MSDN:

通过使用异步编程,可以避免性能瓶颈并增强应用程序的整体响应能力。 但是,用于编写异步应用程序的传统技术可能很复杂,从而使其难以编写,调试和维护。

Visual Studio 2012引入了一种简化的方法,即异步编程,该方法利用了.NET Framework 4.5和Windows Runtime中的异步支持。 编译器完成了开发人员过去的艰巨工作,并且您的应用程序保留了类似于同步代码的逻辑结构。 结果,您只需花费很少的精力即可获得异步编程的所有优点。

http://msdn.microsoft.com/zh-CN/library/vstudio/hh191443.aspx

我认为最好的优点之一是用更少的代码行就能更简洁地理解异步编程模式。 如果您想更清楚地了解它是如何工作的,请查看Jon Skeet回答的以下问题: Task <int>如何成为一个int?

我假设“委托”是指从后台线程调用同步方法。

正如其他人指出的那样,使用asyncawait可以更轻松地读取和编写代码,但是还有另一个重要的区别。

当您使用同步方法时,调用线程将被阻塞,直到操作完成。

当您从后台线程使用同步方法时,UI线程未被阻止,但后台线程仍然被阻止。

使用异步方法时,不会阻塞任何线程。 这样可以更有效地利用资源,而对线程池的压力较小。

暂无
暂无

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

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