async和await

要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点。如果你已经对Task很了解,那么如何使用async和await,在此主要总结了以下三点:

1> 只有在async方法里面才能使用await操作符;

2> await操作符是针对Task对象的;

3> 当方法A调用方法B,方法B方法体内又通过await调用方法C时,如果方法C内部有异步操作,则方法B会等待异步操作执行完,才往下执行;但方法A可以继续往下执行,不用再等待B方法执行完。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Main方法开始");

        //在Main方法中调用B方法,而B方法中又通过await调用方法C时,如果方法C内部有异步操作,则方法B会等待异步操作执行完,才往下执行;但方法Main可以继续往下执行,不用再等待B方法执行完

        B(); //不用等B方法执行完毕,就会往下执行。(因为:await的阻塞方式并不是阻塞同步代码所在的主线程,await其实是阻塞的当前异步函数的异步线程。)

        Console.WriteLine("Main方法结束");

    }

    public static async void B()
    {
        Console.WriteLine("B方法开始");

        await C(); //这里会等待C方法执行完毕,才会往下执行。 await的意思是等待 C这个异步方法执行完毕。

        Console.WriteLine("B方法结束");
    }

    public static Task C()
    {
        Console.WriteLine("C方法开始");

        return Task.Run(() => Console.WriteLine("C方法执行结束")); //这个Run方法的返回值是Task类型            
    }
}

总结:

await的阻塞方式并不是阻塞同步代码所在的主线程,await其实是阻塞的当前异步函数的异步线程。
虽然await会阻塞async异步函数,但是并没有阻塞同步代码的主线程,同步和异步之间仍然相互不阻塞。
虽然await阻塞异步函数向后执行,看起来像是同步的,但是它本质还是异步的,我们同样可以并行执行其他的不关联的异步操作,而同步函数不能并行执行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值