异步编程(1):

异步编程:

  1. C#中的async和await关键字:

异步方法:用async关键字修饰的方法;

①异步方法的返回值一般是Task<T>,T是真正的返回值类型,Task<int>。惯例:异步方法名字以 Async结尾。

②即使方法没有返回值,也最好把返回值声明为非泛型的Task。

③调用泛型方法时,一般在方法前加上await关键字,这样拿到的返回值就是泛型指定的T类型;

④异步方法的“传染性”:一个方法中如果有await调用,则这个方法也必须修饰为async。

例:试一试异步

static async Task Main(string[] args)
{
    string fileName = "d:/1.txt";
    File.Delete(fileName);
    File.WriteAllTextAsync(fileName,"hello async");//异步方法
    string s = await File.ReadAddTextAsync(fileName);
    Console.WriteLine(s);
} 

首先写一个同步方法调用:

运行结果:

再写一个异步方法调用:

运行结果:

同样也能生成txt。

注意:

这里如果我们不写await也是可以的,因为我们写入的字符串“hello”太小了,系统写入太快,所以没什么影响。但如果我们换一个大一点的字符串,例如:我们将他换成一个可变字符串:

这里由于字符串过大,所以系统再写入的时候就会出现错误。

总结:为啥要用异步调用呢?异步不是更麻烦吗?

这里采用异步调用其实在后期我们做开发的时候,能够极大的减小我们系统的并发量。

  1. 编写异步方法:

①打印网页的HTML内容:(不带返回值的)

运行结果:

这样我们的所选网页的HTML代码就被打印出来了。

②打印网页的HTML内容:(带返回值的)

运行结果:

简单总结:如果同样的功能,既有同步方法,又有异步方法,那么首先使用异步方法。.NET 5中,很多框架中的方法也都支持异步:Main、WinForm事件处理函数。

对于不支持的异步方法怎么办?Wait() (无返回值);Result (有返回值)。风险:会产生死锁。尽量不用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值