.net core异步编程
异步编程使您可以编写不会阻塞每个语句或指令的程序,这意味着计算机可以在等待之前的任务完成之前继续执行其他任务。 结果,异步编程使您能够构建更具可伸缩性和响应能力的应用程序。
.net core异步编程
这些已在.Net Core中进行了优化,以简化易用性和性能。 本文讨论了在.Net Core应用程序中进行异步编程时应注意的几点。
[Microsoft .Net 5将.Net Framework和.Net Core结合在一起:找出.Net Standard和.Net Core的合并对开发人员意味着什么 。 | 从InfoWorld的Microsoft Architect博客中了解如何充分利用.Net Framework和.Net Core。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]
async和await关键字
异步方法是一种在方法签名中用async关键字标记的方法。 它可以包含一个或多个await语句。 应该注意的是,await是一元运算符-等待操作数是需要等待的方法的名称。 遇到await关键字的点称为暂停点。 以下代码段说明了如何使用async和await关键字。
异步延续
当您在异步方法中使用await关键字时,该方法将在状态机内拆分。 await关键字捕获当前的同步上下文。 然后,一旦等待的任务完成执行,状态机就会恢复调用者方法中代码的执行。 这也称为延续。 请注意,延续必须等待可能已经排队的其他延续。 最重要的是,在ASP.Net中,在给定的时间点只能执行一个延续。
当等待的任务准备好执行时,线程池中的线程会进入请求上下文并恢复异步处理程序的执行。 重新输入请求上下文是一项昂贵的操作,因为它涉及多个任务,其中包括设置HttpContext.Current以及当前线程的标识和区域性。
同步上下文
ExecutionContext包含有关程序正在执行的当前环境或上下文的相关元数据。 .Net Framework的System.Threading命名空间中提供了SynchronizationContext,它表示执行代码的位置。
但是,请注意,ASP.Net Core中不再具有SynchronizationContext类。 这是因为ASP.Net Core中的异步和等待机制已得到优化和简化:为了方便使用和性能,已从ASP.Net Core中删除了AspNetSynchronizationContext。 当异步处理程序在ASP.Net Core中恢复执行时,线程池中的线程将执行继续。 避免了上下文队列。