(给DotNet加星标,提升.Net技能)
转自:唐宋元明清2188 cnblogs.com/kybs0/p/11988554.html
在我们业务操作时,难免会有多次操作,我们期望什么结果呢?
绝大部分情况,应该是只需要最后一次操作的结果,其它操作应该无效。
自定义等待的任务类
1、可等待的任务类 AwaitableTask:
///
无效的操作可以分为以下俩种:
- 已经进行中的操作,后续结果应标记为无效
- 还没开始的操作,后续不执行
自定义任务类型 AwaitableTask中,添加俩个字段NotExecutable、IsInvalid:
///
2、有返回结果的可等待任务类 AwaitableTask:
///
添加任务等待器,同步等待结果返回:
///
异步任务队列
添加异步任务队列类,用于任务的管理,如添加、执行、筛选等:
1、自动取消之前的任务 AutoCancelPreviousTask
内部使用线程,循环获取当前任务列表,如果当前任务被标记NotExecutable不可执行,则跳过。
NotExecutable是何时标记的?
获取任务时,标记所有获取的任务为NotExecutable。直到任务列表中为空,那么只执行最后获取的一个任务。
2、标记已经进行的任务无效 MarkTaskValid
当前进行的任务,无法中止,那么标记为无效即可。
///
后续执行完后,根据此标记,设置操作结果为空。
///
实践测试
启动10个并发任务,测试实际的任务队列并发操作管理:
测试结果如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yM0UmYjdjMzMTZzYmZ3MzYyMjMyADM2IDZihzYwcjZk9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一共9次操作,只有最后一次操作结果,才是有效的。其它8次操作,一次是无效的,7次操作被取消不执行。
推荐阅读
(点击标题可跳转阅读)
C#异步编程
使用HttpReports快速搭建API分析平台
.NET Core 3.1发布,支持三年的LTS版本
看完本文有收获?请转发分享给更多人
关注「DotNet」加星标,提升.Net技能
好文章,我在看❤️