Trying to understand async and await
示例代码。在下面的async方法中,indexasync方法能否在相应的get*方法完成之前实际返回?我试图理解Async和Wait的基本原理,就像作者提到的那样。
作者代码:https://www.exceptionnotfound.net/using-async-and-await-in-asp-net-what-do-these-keywords-mean/
因此,根据我现在的理解,以下是真的:
异步方法的好处是,当执行到get*方法的调用时,它们不必等待,因此后面的代码可以执行,当get*方法最终返回其值时,indexasync最终可以返回。总结一下?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | public class ContentManagement { public string GetContent() { Thread.Sleep(2000); return"content"; } public int GetCount() { Thread.Sleep(5000); return 4; } public string GetName() { Thread.Sleep(3000); return"Matthew"; } public async Task<string> GetContentAsync() { await Task.Delay(2000); return"content"; } public async Task<int> GetCountAsync() { await Task.Delay(5000); return 4; } public async Task<string> GetNameAsync() { await Task.Delay(3000); return"Matthew"; } } public class HomeController : Controller { [HttpGet] public ActionResult Index() { Stopwatch watch = new Stopwatch(); watch.Start(); ContentManagement service = new ContentManagement(); var content = service.GetContent(); var count = service.GetCount(); var name = service.GetName(); watch.Stop(); ViewBag.WatchMilliseconds = watch.ElapsedMilliseconds; return View(); } [HttpGet] public async Task<ActionResult> IndexAsync() { Stopwatch watch = new Stopwatch(); watch.Start(); ContentManagement service = new ContentManagement(); var contentTask = service.GetContentAsync(); var countTask = service.GetCountAsync(); var nameTask = service.GetNameAsync(); var content = await contentTask; var count = await countTask; var name = await nameTask; watch.Stop(); ViewBag.WatchMilliseconds = watch.ElapsedMilliseconds; return View("Index"); } } |
当你呼叫您的异步调用非只是电话,电话是正常的。执行动作的方法
你是
当你
之后,你
当工作条件,其余的代码开始运行了。在用户界面的应用程序(WinForms和WPF的类),有一个担保,如果你开始在UI线程,其余的代码将运行在同一线程上。在其他的环境,可能不参与担保。
如果你有一个具有网页的JavaScript和Ajax调用自编服务器给回你的设置,你是要调用的参数,和一个"跑,当调用函数返回。在
在异步A /福利院等待着UI应用是显而易见的,它允许时序规划,而非UI线程处理得到安静。
这是一位不明显,在ASP.NET的环境。线程是珍贵的商品,在Web服务器应用程序。我在等待着给你/异步Web应用程序是一个有背景的处理方式(多是用异步请求到webapi说一些没有销售服务与请求的线程上。当你等待着任务的线程去,回到游泳池。当工作条件,你得到一回和contineuse线程代码
在使用时
我很乐于助人msdoc审查这个例子。