发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
前言
最近自己在研究Asp.Net Web API。在看到通过客户端来调用Web API的时候,看到了其中的异步编程,由于自己之前没有接触过,所以就稍微的学习了解一下。这两篇文章是:
Calling a Web API From a .NET Client (C#) http://www./web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client
Calling a Web API From a WPF Application(C#) http://www./web-api/overview/web-api-clients/calling-a-web-api-from-a-wpf-application
关于异步编程的简单理解:
在.NET4.5中新增了异步编程的新特性async和await,使得异步编程更为简单。通过特性可以将这项复杂的工作交给编译器来完成了。之前传统的方式来实现异步编程较为复杂,这样对于程序猿来说处理起来比较困难,调试也没那么方便,后续的维护工作也比较痛苦。
Async和Await关键字是C#异步编程的核心。通过使用这两个关键字,你可以使用.NET Framework 或 Windows Runtime的资源创建一个异步方法如同创建一个同步方法一样容易。
这里还有两篇是我之前对多线程简单学习的入门
http://www.cnblogs.com/aehyok/archive/2013/05/02/3054615.html
http://www.cnblogs.com/aehyok/archive/2013/05/02/3055524.html
接下来通过VS2013 创建一个基于.NET4.5的控制台应用程序进行尝试。
简单示例
先直接把简单的代码贴出来,如下所示
/// <summary> /// 同步方法打印Hello World /// </summary> public static void PrintHelloWorld() { Console.WriteLine("同步方法调用开始"); Console.WriteLine("同步方法:Hello World"); Thread.Sleep(1000); Console.WriteLine("退出同步方法"); } /// <summary> /// 异步方法打印Hello World /// </summary> public async static void AsyncPrintHelloWorld() { Console.WriteLine("异步方法调用开始"); Console.WriteLine("异步方法:Hello World"); await Task.Delay(1000); Console.WriteLine("退出异步方法"); }
上面注释中也有进行说明,第一个是同步方法,第二个是异步方法。同步方法可以通过Thread.Sleep(1000);暂停方法执行1000ms,同样的异步方法可以通过await Task.Delay(1000)来处理,而且在异步方法的声明中要加入async的关键字。
接下来是简单的调用
static void Main(string[] args) { Console.WriteLine("======同步方法调用====="); PrintHelloWorld(); Console.WriteLine("同步方法调用结束"); Console.WriteLine("======异步方法调用====="); AsyncPrintHelloWorld(); Console.WriteLine("异步方法调用结束"); Console.ReadLine(); }
F5执行后结果如下
通过执行结果可以很明显的看出,调用的同步方法里面是顺序执行的,而在异步方法中不一样,当通过Task.Delay(1000)暂停当前方法的时候,其方法外面的下面的方法会继续执行,也就是打印“异步方法调用结束”的语句。
可以发现使用了关键字之后,同步与异步的语法差别很小。随着.NET4.5的推出,许多类库和已有类库都将支持这种新型的异步语法,比如我正在学习的HTTPClient等等。
进一步说明
上面的演示只是通过简单的void的方法进行演示的,当然肯定可以带上返回值的额。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Async { class Program { static void Main(string[] args) { var ret = AsyncAdd("累死了,真想不出啥好的例子来调用"); Console.WriteLine(ret.Result); Console.ReadLine(); } ///异步打印传入的字符串 public async static Task<string> AsyncAdd(string str) { string result = await PringString(str); return result; } public async static Task<string> PringString(string str) { return "Hello World" + str; } } }
通过运行其实和同步的是一样的,只不过看看如何来定义异步方法的返回值,根据Task<T>来进行定义。
如果指定Task<TResult>为返回结果,那么这个方法必须包含return指定的TResult结果的语句。
一个async方法里通常包含一个或多个的对应的await操作符,但如果没有await表达式也不会导致编译错误。但如果调用一个async方 法,却不使用await关键字来标记一个挂起点的话,程序将会忽略async关键字并以同步的方式执行
总结
1.一个异步方法的声明中必然包含一个async的修饰符。
2.异步方法的方法名可以以“Async”结尾。
3.Task<TResult> 当你的方法有返回值时,那么TResult即返回值的类型
4.方法通常至少包含一个await表达式。
关于async和await的学习暂时就这么多,皮毛的皮毛,不过暂时已经足够了,等有时间了可以再深入的进行研究。
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
.NET4.5新特性之异步编程(Async和Await)的使用
NET4.5新特性之异步编程(Async和Await)的使用。下面我来简单的介绍一下异步编程:异步编程,在 .NET Framework 4.5 和 Windows 运行时...
C#中的异步编程--探索await与async关键字的奥妙之处,原来理解和使用异步编程可以这么简单
C#中的异步编程--探索await与async关键字的奥妙之处,原来理解和使用异步编程可以这么简单前言。1->Main.异步方法执行前1->DoAsync.await之前3->DoAsync.await之后1->Main.异步方法执行后...
一文说通C#中的异步编程
WriteLine("Async proccess - enter Func1");Async proccess - startAsync proccess - enter Func1Func1 proccess - startAsync proccess - out Func1Async proccess - enter Func2Func2 pro...
走进异步编程的世界
走进异步编程的世界-开始接触async/await.异步方法:一个程序调用某个方法,在处理完成之前就返回该方法。(1)调用方法:该方法调用异步方法,然后在异步方法执行其任务的时候继续执行;(2)异步方法...
c# async/await的用法
(1)调用方法:该方法调用异步方法,然后在异步方法执行其任务的时候继续执行;(2)异步方法:该方法异步执行工作,然后立刻返回到调...
C#多线程和异步(二)——Task和async/await详解
WriteLine("线程1执行完毕!"); }); task1.Start(); Task task2 = new Task(() => { Thread.Sleep(1000); Console.WriteLi...
C#线程学习笔记八:async & await入门一
#endregion } /// <summary> /// 统计字符个数 /// </summary> /// <param name="id"></param> /// ...
探索c#之Async、Await剖析
探索c#之Async、Await剖析。Async方式,使用Async标记Async1为异步方法,用Await标记GetRequestStreamAsync表示方法内需要耗时的操作。static async void Async1()Async方式:static async void Async2(...
异步陷阱之死锁篇
提倡异步编程旨在给用户更好的前端体验,但异步编程也让学习成本和犯错几率大大升高,其中最常见且最难处理的就是死锁。WriteLine("...
微信扫码,在手机上查看选中内容