ASP.Net中的async+await异步编程的实现
在.NET Framework4.5框架、C#5.0语法中,通过async和await两个要害字,引入了一种新的基于使命的异步编程模子(TAP)。在这种方法下,可以通过相同同步方法编写异步代码,极大简化了异步编程模子。 用法: public async Task<int> GetDotNetCountAsync() { // Suspends GetDotNetCount() to allow the caller (the web server) // to accept another request, rather than blocking on this one. var html = await _httpClient.GetStringAsync("https://dotnetfoundation.org"); return Regex.Matches(html, @".NET").Count; } 要点!!! 1.“async”用来标志一个要领为异步要领,异步要领体内需团结“await”要害字行使,假如没有await,则该要领等同于一个平凡要领。异步要领定名法则凡是以Async末了。 2.“await”要害字只能在异步要领中行使。 3.当在async异步要领中碰着await操纵时,await会阻塞该异步要领不继承往下执行,并将该异步方挂起,将节制权转到该异步要领的挪用者手中。 4.异步要领的挪用者得到节制权之后: 1)假如挪用者必要行使异步要领的返回功效,则继承守候异步要领执行完毕,再继承往下执行。 2)假如挪用者不体谅异步要领的返回功效,则继承往下执行。 场景一:async要领中未行使await static void Main(string[] args) { Console.WriteLine("执行前Main.....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调① GetResultAsync(); Console.WriteLine("执行竣事Main....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调② Console.ReadKey(); } async static Task<int> GetResultAsync() { Console.WriteLine("执行前GetResult.....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调③ Task.Delay(3000).Wait(); Console.WriteLine("执行竣事GetResult.....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调④ return 10; } 执行功效:步调① ——>步调③——>步调④——>步调② 功效说明: 我们会发明,主函数Main挪用异步要领GetResultAsync时,因为异步要领穷乏“await”要害字,主函数需等异步要领步调3,4所有执行竣事后再继承执行步调2,执行次序完全和同步要领执行次序同等; 而且异步要了解给出语法提醒:穷乏“await”要害字 场景2:异步要领体内碰着await之后,当即将节制权转到挪用者手中 static void Main(string[] args) { Console.WriteLine("执行前Main.....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调① GetResultAsync(); Console.WriteLine("执行竣事Main....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调② Console.ReadKey(); } async static Task<int> GetResultAsync() { Console.WriteLine("执行前GetResult.....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调③ await Task.Delay(3000); Console.WriteLine("执行竣事GetResult.....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调④ return 10; } 执行功效:步调① ——>步调③——>步调②——>步调④ 功效说明: 我们会发明,主函数Main挪用异步要领GetResultAsync,在碰着异步要领中“await”要害字时 1)阻塞了当前异步要领并当即将节制权转交给挪用者主函数Main 2)主函数得到节制权后继承执行要领体内步调2,GetResultAsync要领例异步执行(守候异步操纵竣事之后执行步调4)。 场景3:异步要领体内碰着await之后,当即将节制权转到挪用者手中,挪用者需守候异步要领返回功效 static void Main(string[] args) { Console.WriteLine("执行前Main.....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调① Task<int> res = GetResultAsync(); Console.WriteLine("执行竣事Main....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调② Console.WriteLine("执行功效:" + res.Result + "....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调③ Console.ReadKey(); } async static Task<int> GetResultAsync() { Console.WriteLine("执行前GetResult.....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调④ await Task.Delay(3000); Console.WriteLine("执行竣事GetResult.....线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步调⑤ return 10; } 执行功效:步调① ——>步调④——>步调②——>步调⑤——>步调③ 功效说明: 我们会发明,主函数Main挪用异步要领GetResultAsync,在碰着异步要领中“await”要害字时 1)阻塞了当前异步要领并当即将节制权转交给挪用者主函数Main 2)主函数得到节制权后继承执行要领体内步调2和步调3,GetResultAsync要领例异步执行。 3)当主函数执行步调3时,因为步调3必要打印异步要领的返回功效,故必要守候异步要领竣事才气继承。以是需先执行步调5,然后再继承执行步调3。 最后,异步编程的时辰我们凡是会团结Task来行使 到此这篇关于ASP.Net中的async+await异步编程的实现的文章就先容到这了,更多相干ASP.Net async+await异步编程内容请搜刮剧本之家早年的文章或继承赏识下面的相干文章但愿各人往后多多支持剧本之家! (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |