例如 Winform 中的一个场景,当我们
HttpWebRequest
同步使用时 UI 线程将被阻塞,这反过来又请求 Internet 上的资源。在这里,我们可以使用 async 方法执行该方法,而某些任务的 await 关键字允许用户与 winform 交互,即使请求仍在运行。
这甚至可以通过委托来实现,那么异步功能的优势是什么?
例如 Winform 中的一个场景,当我们
HttpWebRequest
同步使用时 UI 线程将被阻塞,这反过来又请求 Internet 上的资源。在这里,我们可以使用 async 方法执行该方法,而某些任务的 await 关键字允许用户与 winform 交互,即使请求仍在运行。
这甚至可以通过委托来实现,那么异步功能的优势是什么?
我假设“委托”是指从后台线程调用同步方法。
正如其他人所指出的,使用async
and更容易阅读和编写代码await
,但还有另一个重要区别。
当您使用同步方法时,调用线程会被阻塞,直到操作完成。
当您从后台线程使用同步方法时,UI 线程不会被阻塞,但后台线程仍然会阻塞。
当您使用异步方法时,不会阻塞任何线程。这允许更有效地使用您的资源,对线程池的压力更小。
async 和 await 术语要简单得多,您基本上可以像编写同步应用程序一样编写代码,只需添加一些关键字。
来自 MSDN:
通过使用异步编程,您可以避免性能瓶颈并提高应用程序的整体响应能力。然而,编写异步应用程序的传统技术可能很复杂,使得它们难以编写、调试和维护。
Visual Studio 2012 引入了一种简化的方法,即异步编程,它利用 .NET Framework 4.5 和 Windows 运行时中的异步支持。编译器完成了开发人员过去常做的艰巨工作,并且您的应用程序保留了类似于同步代码的逻辑结构。因此,您只需付出很少的努力即可获得异步编程的所有优势。
http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx
在我看来,最大的优势之一是用更少的代码行更简洁地理解异步编程模式。如果您想更清楚地了解它是如何工作的,请查看 Jon Skeet 回答的这个问题:Task<int> 如何成为 int?