梦见你的名字 发表于 2025-1-9 09:34:20

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

在 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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: C# 中await和async的用法(一)