.Net Task 异步执行不等待结果返回


该文章适合有一定异步编程基础的童鞋

开始之前先看.NET官网的一张图:

异步编程中最需弄清的是控制流是如何从方法移动到方法的。

没有理解的话可以去看一下

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-programming-model

这幅图讲的是有结果返回的情况,但是在大多数的场景中

比如说:我假设有这样一个需求:在我获取数据的同时需要添加大批量的数据

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、只适合失败也不会产生影响的场景

 

 不对之处欢迎评论 ^_^

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM