C#中Task.ContinueWith连续任务使用实例

 更新时间:2022年02月14日 10:09:17   作者:厦门德仔  
本文主要介绍了C#中Task.ContinueWith连续任务使用实例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务。例如,一个使用前一个任务的结果的新任务,如果前一个任务失败了,这个任务就应执行一些清理工作。任务处理程序都不带参数或者带一个对象参数,而任务的连续处理方法都有一个Task类型的参数,这里可以访问起始任务的相关信息:

如下面的示例代码: 

   class Program
    {
        static void DoOnFirst()
        {
            Console.WriteLine($"doing some task{Task.CurrentId}");
            Thread.Sleep(3000);
        }
        static void DoOnSecond(Task t)
        {
            Console.WriteLine($"task {t.Id} finished");
            Console.WriteLine($"this task id {Task.CurrentId}");
            Console.WriteLine("doing some cleanup");
            Thread.Sleep(3000);
        }
        static void Main(string[] args)
        {
            Task t1 = new Task(DoOnFirst);
            t1.Start();
            

            Task t2 = t1.ContinueWith(DoOnSecond);
            Task t3 = t1.ContinueWith(DoOnSecond);
            Task t4 = t2.ContinueWith(DoOnSecond);
            Console.ReadKey();
        }
    }
 

连续任务通过在任务上调用ContinueWith()方法来定义。也可以使用TaskFactory类来定义。t1.ContinueWith(DoOnSecond)方法表示,调用DoOnSecond()方法的新任务应在任务t1结束时立即启动。在一个任务结束时,可以启动多个任务,连续任务也可以有另外一个连续任务。如下面的例子所示:

            Task t1 = new Task(DoOnFirst);
            t1.Start();            

            Task t2 = t1.ContinueWith(DoOnSecond);
            Task t3 = t1.ContinueWith(DoOnSecond);
            Task t4 = t2.ContinueWith(DoOnSecond);

使用TaskCreationOptions枚举中的值,可以指定,连续的任务只有在起始任务成功(或者失败)结束时启动。一些可能的值是OnlyOnFaulted、NotOnFaulted 、OnlyOnCanceled、NotOnCanceled和OnlyOnRanToCompletion。

Task t5 = t1.ContinueWith(DoOnError, TaskContinuationOptions.OnlyOnFaulted)

C# Task.ContinueWith 返回对象

使用Task.ContinueWith 可以在Task完成时而继续执行的逻辑

当在ContinueWith中需要返回一个对象时,应该如何使用

 下方代码可以表示,在设置缓存完成后,重新读取缓存,并返回

 var item = await SetCacheItemAsync("key",  cacheItems)
                .ContinueWith<>(async _ => await cacheItem.GetAsync(key));

到此这篇关于C#中Task.ContinueWith连续任务使用实例的文章就介绍到这了,更多相关C# Task.ContinueWith内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在C#中为文本内容添加行号的多种方法

    在C#中为文本内容添加行号的多种方法

    在C#开发中,无论是进行代码审查、分析日志文件,还是生成规范的文档报告,为文本内容添加行号都是一项常见的需求,本文将深入探讨如何在C#中高效、准确地为文本内容添加行号的多种方法,帮助你找到最适合自己的解决方案,需要的朋友可以参考下
    2025-11-11
  • C#属性get和set使用示例详解

    C#属性get和set使用示例详解

    属性是C#中的一种特殊成员,它允许外部以受控方式访问类的状态,属性通过get和set方法实现对类私有字段的读取和修改,本文给大家介绍C#属性get和set使用,感兴趣的朋友一起看看吧
    2024-09-09
  • C#实现排列组合算法完整实例

    C#实现排列组合算法完整实例

    这篇文章主要介绍了C#实现排列组合算法的完整实例,文中实例主要展示了排列循环方法和排列堆栈方法,需要的朋友可以参考下
    2014-09-09
  • WinForm实现按钮空格防误触的实战指南

    WinForm实现按钮空格防误触的实战指南

    文章介绍了为什么在WindowsForms(WinForms)中按空格键会自动触发按钮点击事件的问题,并提供了一个自定义按钮类,通过重写`ProcessCmdKey`方法,彻底阻止空格键触发点击事件,需要的朋友可以参考下
    2025-12-12
  • C#动态加载程序集的全攻略

    C#动态加载程序集的全攻略

    在 C# 中,动态加载程序集是一种常见的需求,特别是在需要模块化、插件化或运行时扩展功能的场景中,以下是如何实现 C# 代码依赖的动态加载的详细说明,结合了知识库中的关键信息和实际应用技巧,需要的朋友可以参考下
    2025-08-08
  • C# Winform DataGridView数据刷新问题的解决办法

    C# Winform DataGridView数据刷新问题的解决办法

    DataGridView 是比较常用的表格控件,在 DataGridView 中显示数据, 一般使用 dataGridView1.DataSource = 数据源,来绑定数据,那么如何做到及时刷新数据呢,本文给大家介绍了C# Winform DataGridView数据刷新问题的解决办法,需要的朋友可以参考下
    2024-09-09
  • C#使用foreach语句遍历二维数组的方法

    C#使用foreach语句遍历二维数组的方法

    这篇文章主要介绍了C#使用foreach语句遍历二维数组的方法,实例分析了C#遍历数组的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C#实现一个相当全面的数据转换工具类

    C#实现一个相当全面的数据转换工具类

    这篇文章主要为大家介绍了如何使用C#编写一个通用工具类DataConvert来进行数据转换,包括30+个数据类型转换,需要的可以了解一下
    2025-03-03
  • c# 接口interface基础入门小例子

    c# 接口interface基础入门小例子

    用于描述类的功能,类似于契约,指示了类将:执行的工作,形参类型,返回结果类型,但本身没有执行的代码
    2013-04-04
  • C#获取图片文件扩展名的方法

    C#获取图片文件扩展名的方法

    这篇文章主要介绍了C#获取图片文件扩展名的方法,实例总结了较为常见的获取图片文件扩展名的技巧,非常具有实用价值,需要的朋友可以参考下
    2014-10-10

最新评论