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

打印 上一主题 下一主题

主题 966|帖子 966|积分 2898

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

1. await与async的关系


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

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:数据库大量数据的交互



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表