您好,欢迎来到年旅网。
搜索
您的当前位置:首页C# 中await和async的用法(一)

C# 中await和async的用法(一)

来源:年旅网

在 C# 中,await 关键字用于异步编程,配合 async 方法一起使用。await 允许你等待异步操作完成,而不会阻塞当前线程。简而言之,await 会暂停当前方法的执行,直到任务完成,然后继续执行。

1. await与async的关系

asyncasync关键字是一个函数修饰符,用于表示这个方法是一个异步方法,但并不绝对。

Async方法在执行的时候,开始是以同步的方式执行(即在调用方的thread里跑的),直到遇到await关键字,从await关键字开始,C#会另起一个thread来执行await后面的代码。

C#新起的这个thread,会等待await的方法执行,在执行结束前,一直处于阻塞状态。

而调用方的thread(一般是主线程)会继续运行,可以处理UI等操作。

如果Async方法里面的代码没有包含await的代码会怎么样?

那整个函数就会同步执行,跟普通函数没差别。编译器只会给你个警告。

当一个方法被标记为async时,它返回一个Task对象,而不是直接返回结果。

举例:

        private async Task<bool> Fun1()
        {
            int num = 2;
            await FunSub(num); // 使用异步方法代替阻塞方法
            return true;
        }

在上面的例子中,在async异步函数里,搭配await使用,实现异步功能。

如果没有await指令,这个异步函数将以同步方式运行,不会自动新建线程。

await:await关键字是一个方法修饰符,用于在一个函数内部等待一个Task或async方法完成。

await 后面的方法不能是同步方法,否则会报错。

当在async方法中使用await时,它会暂停当前方法的执行,直到等待的Task完成。

一旦Task完成,这个async方法才会继续执行后续的代码。

当async方法暂停期间,由于和主线程是的,只是这个子线程在等待,主线程继续执行,该干啥干啥。

举例:

        private async Task<bool> FunSub(int Num)
        {
            await Task.Delay(Num); // 使用异步方法代替阻塞方法
            return true;
        }

在这个异步方法中,只有当Task延时设定的时间后,才会执行return指令。

2. 异步方法的使用场景

针对比较耗时的操作,通过异步方法可以提高程序的响应性和性能,提高操作的流畅性。

尤其适用于处理IO密集型操作场景,主要是这三类:

a:网络请求

b:文件读写

c:数据库大量数据的交互

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务