我如何看待异步代码?!
异步代码对于编写响应性应用程序越来越重要,它越来越流行。不幸的是,异步编程增加了代码的复杂性。因此,无论您的经验水平如何,都很难理解这些代码是如何工作的。无论您是新手还是只想复习一下,这里都是异步代码世界的简介!
什么是异步代码?
异步(async)编程允许您在不停止(或舞台调度)执行操作的整个线程。关于异步代码的一个常见误解是它提高了性能,但这并不一定是真的。相反,异步编程的主要优点是它增加了任务的数量(吞吐量)可以并发执行,而不必阻塞执行这些操作的线程。
您可能认为异步代码有点像多线程代码。毕竟,在这两者中可以同时执行许多方法。实际上,异步编程可以与单一或多线程应用程序一起使用。这意味着您可以使用单线程异步程序,其中一个线程可以运行并发任务。相反,您也可以有一个多线程异步应用程序,其中多个线程可以各自运行多个并发任务。
为什么我应该使用异步代码?请举例说明!
要使用类比来演示异步编程,请考虑烘焙蛋糕的操作。此操作将由执行多个步骤(或任务),如下面的代码所示。这段代码是可用的,一旦方法执行完毕,您仍然会有一块美味的蛋糕。然而,由于所有代码都是同步,每行都将按顺序运行。换言之,您将在等待烤箱完成预热时完全静止。你可以同时为你的蛋糕做面糊!
在现实生活中,你通常希望在烤箱预热时制作面糊,或在蛋糕烘焙时制作糖霜,从而实现多重任务。这样做可以提高你的工作效率,让你烤蛋糕的速度更快。这就是异步代码派上用场的地方!通过使现有代码异步,我们可以执行更多操作来打发时间等待一任务比如在烤箱里烤蛋糕。为此,我们修改了代码以包含一个名为通过时间。此代码保存任务的状态,开始运行另一个同步或异步函数,并在实际需要时检索保存的任务的值。
与缺少密码时间函数调用时,MakeCakeAsync可以在不阻塞线程的情况下完成更多任务,并缩短执行整个方法所需的时间。
如何在中编写异步代码。净利润?
谢天谢地,C#让编写异步代码变得“小菜一碟”任务 类型和等待 和异步关键字。 The任务类型告诉调用方最终的返回值类型。它还指示在处理调用方方法时可以执行其他操作。 The异步关键字启用等待关键字,它让编译器知道我们需要函数的返回值,但不是马上。因此,我们不需要阻塞调用,可以继续运行其他任务,直到需要等待的值。异步方法最初将同步运行,直到它遇到等待关键字。此时将开始异步执行。
我刚刚了解了异步代码!现在怎么办?
虽然使用异步代码烤蛋糕很好,但还有很多其他实际应用程序可以使用异步代码。两个最常见的示例包括:
- 使用HTTP请求的程序–根据请求,HTTP调用可能需要很长时间才能完全处理。使用异步代码可以让您在等待服务器响应的同时执行其他工作。
- 使用UI元素的程序–WPF应用程序或任何使用按钮、文本框和其他UX资产的应用程序都很适合异步实现。例如,WPF应用程序接收要解析的文件可能需要一段时间。通过使此操作异步,您仍然可以与UI交互,而无需在等待功能完成时完全冻结应用程序。
现在您已经了解了异步编程的基础知识,是时候改进它了!在编写稳定的异步代码时,有很多秘密的注意事项。有关探索这些提示和技巧的优秀资源,请查看David Fowler关于异步编程的帖子。
和所有代码一样,将来需要诊断异步程序中的错误。若要了解如何在Visual Studio中调试异步代码,请收看即将发布的博客文章…
旁注:不,我没有用蛋糕来比喻,只是因为我最近做了很多烘焙。😉