比较好的微网站开发平台,思茅区建设局网站,门户网站框架下载,江西南昌网站制作众所周知C#提供Async和Await关键字来实现异步编程。在本文中#xff0c;我们将共同探讨并介绍什么是Async 和 Await#xff0c;以及如何在C#中使用Async 和 Await。同样本文的内容也大多是翻译的#xff0c;只不过加上了自己的理解进行了相关知识点的补充#xff0c;如果你… 众所周知C#提供Async和Await关键字来实现异步编程。在本文中我们将共同探讨并介绍什么是Async 和 Await以及如何在C#中使用Async 和 Await。同样本文的内容也大多是翻译的只不过加上了自己的理解进行了相关知识点的补充如果你认为自己的英文水平还不错大可直接跳转到文章末尾查看原文链接进行阅读。作者依乐祝原文链接https://www.cnblogs.com/yilezhu/p/10555849.html写在前面自从C# 5.0时代引入async和await关键字后异步编程就变得流行起来。尤其在现在的.NET Core时代如果你的代码中没有出现async或者await关键字都会让人感觉到很奇怪。想象一下当我们在处理UI和按钮单击时我们需要运行一个长时间运行的方法比如读取一个大文件或其他需要很长时间的任务在这种情况下整个应用程序必须等待这个长时间运行的任务完成才算完成整个任务。换句话说如果同步应用程序中的任何进程被阻塞则整个应用程序将被阻塞我们的应用程序将停止响应直到整个任务完成。在这种情况下异步编程将非常有用。通过使用异步编程应用程序可以继续进行不依赖于整个任务完成的其他工作。在Async 和 await关键字的帮助下使得异步编程变得很简单而且我们将获得传统异步编程的所有好处。实例讲解假设我们分别使用了两种方法即Method 1和Method 2这两种方法不相互依赖而Method 1需要很长时间才能完成它的任务。在同步编程中它将执行第一个Method 1并等待该方法的完成然后执行Method 2。因此这将是一个时间密集型的过程即使这两种方法并不相互依赖。我们可以使用简单的多线程编程并行运行所有方法但是它会阻塞UI并等待完成所有任务。要解决这个问题我们必须在传统编程中编写很多的代码但是现在我们有了Async 和 await关键字那么我们将通过书写很少的并且简洁的代码来解决这个问题。此外我们还将看到更多的示例如果任何第三个方法(如Method 3)都依赖于Method 1那么它将在Wait关键字的帮助下等待Method 1的完成。Async 和 await是代码标记它标记代码位置为任务完成后控件应该恢复的位置。下面让我们举几个例子来更好进行理解吧C#中Async 和 await关键字的示例我们将采用控制台应用程序进行演示。第一个例子在这个例子中我们将采取两个不相互依赖的方法。在上面给出的代码中Method 1和Method 2不相互依赖我们是从主方法调用的。在这里我们可以清楚地看到方法1和方法2并不是在等待对方完成。输出现在来看第二个例子假设我们有Method 3它依赖于Method 1第二个例子在本例中Method 1将总长度作为整数值返回我们在Method 3中以长度的形式传递一个参数它来自Method 1。在这里在传递Method 3中的参数之前我们必须使用AWAIT关键字为此我们必须使用调用方法中的async 关键字。在控制台应用程序的Main方法中因为不能使用async关键字而不能使用await 关键字因为它会给出下面给出的错误。(但是如果你使用的是C#7.1及以上的方法是不会有问题的因为C#7.1及以上的语法支持Mian方法前加async)我们将创建一个新的方法作为CallMethod在这个方法中我们将调用我们的所有方法分别为Method 1、Method 2和Method 3。在上面给出的代码中Method 3需要一个参数即Method 1的返回类型。在这里await关键字对于等待Method 1任务的完成起着至关重要的作用。输出第三个例子.NET Framework4.5中有一些支持APIWindows运行时包含支持异步编程的方法。在Async 和 await关键字的帮助下我们可以在实时项目中使用所有这些以便更快地执行任务。包含异步方法的API有HttpClient, SyndicationClient, StorageFile, StreamWriter, StreamReader, XmlReader, MediaCapture, BitmapEncoder, BitmapDecoder 等。在本例中我们将异步读取大型文本文件中的所有字符并获取所有字符的总长度。在上面给出的代码中我们调用ReadFile方法来读取文本文件的内容并获取文本文件中总字符的长度。在sampleText.txt中文件包含了太多的字符因此读取所有字符需要很长时间。在这里我们使用异步编程从文件中读取所有内容所以它不会等待从这个方法获得一个返回值并执行其他代码行但是它必须等待下面给出的代码行因为我们使用的是等待关键字我们将对下面给出的代码行使用返回值。int length await task;Console.WriteLine( Total length: length); 随后将按顺序执行其他代码行。Console.WriteLine( After work 1); Console.WriteLine( After work 2); 输出最后在这里我们必须了解非常重要的一点如果我们没有使用await 关键字那么该方法就作为一个同步方法。编译器将向我们显示警告但不会显示任何错误。像上面这种简单的方式一样我们可以在C#代码中使用async 和await关键字来愉快的进行异步编程了。最后的最后感谢大家的阅读本文大部分内容翻译自https://www.c-sharpcorner.com/article/async-and-await-in-c-sharp/