天天看点

C# Task 循环任务_C# 异步并发操作,只保留最后一次操作

(给DotNet加星标,提升.Net技能)

转自:唐宋元明清2188 cnblogs.com/kybs0/p/11988554.html

在我们业务操作时,难免会有多次操作,我们期望什么结果呢?

绝大部分情况,应该是只需要最后一次操作的结果,其它操作应该无效。

自定义等待的任务类

1、可等待的任务类 AwaitableTask:

/// 
           

无效的操作可以分为以下俩种:

  • 已经进行中的操作,后续结果应标记为无效
  • 还没开始的操作,后续不执行

自定义任务类型 AwaitableTask中,添加俩个字段NotExecutable、IsInvalid:

/// 
           

2、有返回结果的可等待任务类 AwaitableTask:

/// 
           

添加任务等待器,同步等待结果返回:

/// 
           

异步任务队列

添加异步任务队列类,用于任务的管理,如添加、执行、筛选等:

1、自动取消之前的任务 AutoCancelPreviousTask

内部使用线程,循环获取当前任务列表,如果当前任务被标记NotExecutable不可执行,则跳过。

NotExecutable是何时标记的?

获取任务时,标记所有获取的任务为NotExecutable。直到任务列表中为空,那么只执行最后获取的一个任务。

2、标记已经进行的任务无效 MarkTaskValid

当前进行的任务,无法中止,那么标记为无效即可。

/// 
           

后续执行完后,根据此标记,设置操作结果为空。

/// 
           

实践测试

启动10个并发任务,测试实际的任务队列并发操作管理:

测试结果如下:

C# Task 循环任务_C# 异步并发操作,只保留最后一次操作

一共9次操作,只有最后一次操作结果,才是有效的。其它8次操作,一次是无效的,7次操作被取消不执行。

推荐阅读

(点击标题可跳转阅读)

C#异步编程

使用HttpReports快速搭建API分析平台

.NET Core 3.1发布,支持三年的LTS版本

看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

C# Task 循环任务_C# 异步并发操作,只保留最后一次操作

好文章,我在看❤️