时间:2021-05-20
现代应用程序广泛使用文件和网络 I/O。I/O 相关 API 传统上默认是阻塞的,导致用户体验和硬件利用率不佳,此类问题的学习和编码的难度也较大。而今基于 Task 的异步 API 和语言级异步编程模式颠覆了传统模式,使得异步编程非常简单,几乎没有新的概念需要学习。
异步代码有如下特点:
使用 .NET 基于 Task 的异步模型可以直接编写 I/O 和 CPU 受限的异步代码。该模型围绕着Task和Task<T>类型以及 C# 的async和await关键字展开。本文将讲解如何使用 .NET 异步编程及一些相关基础知识。
Task 是 Promise 模型的实现。简单说,它给出“承诺”:会在稍后完成工作。而 .NET 的 Task 是为了简化使用“承诺”而设计的 API。
Task表示不返回值的操作,Task<T>表示返回T类型的值的操作。
重要的是要把 Task 理解为发起异步工作的抽象,而不是对线程的抽象。默认情况下,Task 在当前线程上执行,并酌情将工作委托给操作系统。可以选择通过Task.RunAPI 明确要求任务在单独的线程上运行。
Task 提供了一个 API 协议,用于监视、等待和访问任务的结果值。比如,通过await关键字等待任务执行完成,为使用 Task 提供了更高层次的抽象。
使用 await 允许你在任务运行期间执行其它有用的工作,将控制权交给其调用者,直到任务完成。你不再需要依赖回调或事件来在任务完成后继续执行后续工作。
下面示例代码演示了一个典型的异步 I/O 调用操作:
public Task<string> GetHtmlAsync(){ // 此处是同步执行 var client = new HttpClient(); return client.GetStringAsync("https://pletedEventArgs{ public MyReturnType Result { get; }}若使用 AMP 异步模式,则需要定义两个方法,一个用于开始执行异步操作,一个用于接收异步操作结果:
publicclassMyClass{ public IAsyncResult BeginRead( byte [] buffer, int offset, int count, AsyncCallback callback, object state); publicintEndRead(IAsyncResult asyncResult);}后两种异步模式已经过时不推荐使用了,这里也不再继续探讨。岁数大点的 .NET 程序员可能比较熟悉后两种异步模式,毕竟那时候没有 async/await,应该没少折腾。
以上就是c# 异步编程基础讲解的详细内容,更多关于c# 异步编程的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
最近在我参与的几个.Net项目中都有用到异步编程,作为一名.Net小白,很有必要好好地学习一下C#异步编程。什么是异步异步指的就是不用阻塞当前线程来等待任务的完
众所周知C#提供Async和Await关键字来实现异步编程。在本文中,我们将共同探讨并介绍什么是Async和Await,以及如何在C#中使用Async和Awai
VR/AR虚拟现实课程大致分为五个阶段,分别为C#编程语言、Unity3D引擎基础、计算机图形学与GPU编程、项目阶段、Unreal虚幻4引擎。 《c#编程语
在我们学习C#编程语言的基础构件块之前,让我们先看一下C#的最小的程序结构,以便作为接下来章节的参考。C#HelloWorld实例一个C#程序主要包括以下部分:
本例讲解了使用C#编程实现截取DOSming令返回值的实现方法。tbResult.Text="";ProcessStartInfostart=newProces