2020-08-04

.net core异步编程

异步编程使您可以编写不会阻塞每个语句或指令的程序,这意味着计算机可以在等待之前的任务完成之前继续执行其他任务。 结果,异步编程使您能够构建更具可伸缩性和响应能力的应用程序。

async和await关键字允许我们编写异步代码。

这些已在.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关键字。

static void Main(string[] args)
        {
            CallWithAsyns();
            Console.ReadKey();
        }
        static Task<string> GeettingAsyne(string name)
        {
            Task<string> task = new Task<string>(() =>
            {
                Thread.Sleep(5000);
                return string.Format("你好!" + name);
            });
            task.Start();
            Console.WriteLine("启动任务");
            task.Wait(1000);
            return task;
        }
        async static void CallWithAsyns()
        {
            string result = await GeettingAsyne("张三");
            Console.WriteLine(result);
        }

异步延续
当您在异步方法中使用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中恢复执行时,线程池中的线程将执行继续。 避免了上下文队列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值