该文章适合有一定异步编程基础的童鞋
开始之前先看.NET官网的一张图:
异步编程中最需弄清的是控制流是如何从方法移动到方法的。
没有理解的话可以去看一下
这幅图讲的是有结果返回的情况,但是在大多数的场景中
比如说:我假设有这样一个需求:在我获取数据的同时需要添加大批量的数据
public async Task<List<Model>> GetAndAddModel(List<Model> createModel) { var list =await GetModels(id);//获取一个列表 var count=await CreateModels(createModel);//大批量添加数据 count--受影响的行数
return list;
}
用了await 虽然进行的是异步I/O操作,但是也意味的必须等待结果返回
这里假设我获取花了50ms,创建需要5s,那么“GetAndAddModel”这个方法需要执行5s+50ms的时间
如果让一个用户等待5s,结果可想而知
我们更希望将方法“CreateModels”它自己去执行下面的操作,而不用等待它的结果,毕竟行数对我的意义并不大
public async Task<List<Model>> GetAndAddModel(List<Model> createModel) { var list =await GetModels(id);//获取一个列表 _=CreateModels(createModel);//大批量添加数据
return list; }
于是成了这个样子,这里的关键在于:
在执行添加的时候并不用等待结果返回,而是继续执行方法
也就是我执行这个方法只需要50ms
_=CreateModels(createModel);
这里我没有用变量接收,毕竟变量也会耗内存
注意:
1、这样做也就意味着你无法获取结果
2、只适合失败也不会产生影响的场景
不对之处欢迎评论 ^_^