我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#连续任务Task.ContinueWith方法怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#连续任务Task.ContinueWith方法怎么用

这篇“C#连续任务Task.ContinueWith方法怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#连续任务Task.ContinueWith方法怎么用”文章吧。

一、简介

通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务。ContinueWith是Task根据其自身状况,决定后续应该作何操作。也就是说,在运行完task后,会执行task.continuewith(XX)中的XX语句,但是是否执行、如何执行等需要看task的运行情况。例如:一个使用前一个任务的结果的新任务,如果前一个任务失败了,这个任务就应执行一些清理工作。任务处理程序都不带参数或者带一个对象参数,而任务的连续处理方法都有一个Task类型的参数。

二、案例

案例一:

代码:

        static int TaskMethod(string name, int seconds)        {            Console.WriteLine("Frist Task Method : Task {0} is running on a thread id: {1}. Is thread pool thread: {2}",            name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);            Thread.Sleep(TimeSpan.FromSeconds(seconds));            return 60 * seconds;        }        static void Main(string[] args)        {            var FirstTask = new Task<int>(() => TaskMethod("Frist Task", 3));            FirstTask.ContinueWith(t => Console.WriteLine("Frist Task Result: {0}. Thread id: {1}, Is in Thred Pool: {2}",            t.Result, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread),            TaskContinuationOptions.OnlyOnRanToCompletion);//線程池線程            FirstTask.Start();                       Console.ReadKey();        }

结果:

C#连续任务Task.ContinueWith方法怎么用

Start()和ContinueWith()的先后顺序没有关系,ContinueWith()会等待直到firstTask运行状态达到 IsCompleted,因为TaskContinuationOptions中的OnlyOnRanToCompletion.必须指出的是,ContinueWith()中的参数是需要以Task为参数的,也就是firstTask作为参数被传入,而且ContinueWith()运行在线程池中的线程中。我觉得比较重要的一点是:把ContinueWith()中的语句当做一块新的语句块,他们独立于主线程。无论如何,他们都要被判断,如果状态(status)不满足,那么他们不执行;当指定了多个状态,则使用合理的对应状态。

案例二:

代码:

    class Program    {        static int TaskMethod(string name, int seconds)        {            Console.WriteLine("Task Method : Task {0} is running on a thread id: {1}. Is thread pool thread: {2}",            name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);            Thread.Sleep(TimeSpan.FromSeconds(seconds));            return 60 * seconds;        }        static void Main(string[] args)        {            Console.WriteLine("Main Thread id {0}, Is in Thred Pool: {1}",            Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);            var firstTask = new Task<int>(() => TaskMethod("frist task", 3));            var secondTask = new Task<int>(() => TaskMethod("second task", 2));            firstTask.ContinueWith(t => Console.WriteLine("Result:Frist Thread Result: {0}. Thread id: {1}, Is in Thred Pool: {2}",            t.Result, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread),            TaskContinuationOptions.OnlyOnRanToCompletion);            firstTask.Start();            secondTask.Start();            Thread.Sleep(TimeSpan.FromSeconds(4)); //给予足够时间,让firstTask、secondTask及其后续操作执行完毕。            Task continuation = secondTask.ContinueWith(t => Console.WriteLine("Result:Second Thread Result: {0}. Thread id: {1}, Is in Thred Pool: {2}",            t.Result, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread),            TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.ExecuteSynchronously);            Console.ReadLine();            Console.ReadKey();        }    }

结果:

C#连续任务Task.ContinueWith方法怎么用

这里主线程休眠了足足4秒钟,足以让firstTask和secondTask两个任务完成运行,而后,由于secondTask的后续除了接受OnlyOnRanToCompletion外,还接受ExecuteSynchronously。因此,后续运行中,由于主线程还没有结束,因此 ExecuteSynchronously得到认可,故secondTask的后续是在主线程上运行。

案例三:

代码:

    class Program    {        static int TaskMethod(string name, int seconds)        {            Console.WriteLine("Task Method : Task {0} is running on a thread id: {1}. Is thread pool thread: {2}",            name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);            Thread.Sleep(TimeSpan.FromSeconds(seconds));            return 60 * seconds;        }        static void Main(string[] args)        {            Console.WriteLine("Main Thread id {0}, Is in Thred Pool: {1}",            Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);            var firstTask = new Task<int>(() => TaskMethod("frist task", 3));            var secondTask = new Task<int>(() => TaskMethod("second task", 2));            firstTask.ContinueWith(t => Console.WriteLine("Result:Frist Thread Result: {0}. Thread id: {1}, Is in Thred Pool: {2}",            t.Result, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread),            TaskContinuationOptions.OnlyOnRanToCompletion);            firstTask.Start();            secondTask.Start();           //Thread.Sleep(TimeSpan.FromSeconds(4)); //给予足够时间,让firstTask、secondTask及其后续操作执行完毕。            Task continuation = secondTask.ContinueWith(t => Console.WriteLine("Result:Second Thread Result: {0}. Thread id: {1}, Is in Thred Pool: {2}",            t.Result, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread),            TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.ExecuteSynchronously);            Console.ReadLine();            Console.ReadKey();        }    }

结果:

C#连续任务Task.ContinueWith方法怎么用

然而,如果把4秒钟的休眠注释掉,那么由于主线程很早就结束了,因此secondTask只能接受到OnlyOnRanToCompletion,因此还是运行在线程池中。

以上就是关于“C#连续任务Task.ContinueWith方法怎么用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#连续任务Task.ContinueWith方法怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#连续任务Task.ContinueWith方法怎么用

这篇“C#连续任务Task.ContinueWith方法怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#连续任务Ta
2023-06-30

C#中Task.ContinueWith连续任务怎么用

这篇文章给大家分享的是有关C#中Task.ContinueWith连续任务怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务。例如,一个使用前一个任
2023-06-29

C#怎么使用Task.ContinueWith组合任务

这篇文章主要讲解了“C#怎么使用Task.ContinueWith组合任务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么使用Task.ContinueWith组合任务”吧!代码案例简
2023-06-30

django任务调度方法怎么使用

Django中的任务调度可以通过以下方法进行使用:1. 使用Django自带的任务调度器 - Django提供了一个内置的任务调度器,可以轻松地在项目中使用。首先,在settings.py文件中添加以下代码:```pythonINSTALL
2023-09-26

C++预处理连接方法怎么使用

这篇文章主要讲解了“C++预处理连接方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++预处理连接方法怎么使用”吧!C++预处理连接(Preprocessor Concatena
2023-07-05

C#任务并行Parellel.For和Parallel.ForEach怎么使用

这篇文章主要介绍了C#任务并行Parellel.For和Parallel.ForEach怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#任务并行Parellel.For和Parallel.ForEac
2023-07-02

怎么用C语言实现任务调度

这篇文章主要介绍“怎么用C语言实现任务调度”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用C语言实现任务调度”文章能帮助大家解决问题。任务调度模式结构整体上的结构属于线性结构,结合链表和定时器来
2023-07-05

C#中怎么调用方法

这篇“C#中怎么调用方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#中怎么调用方法”文章吧。C# 中调用方法可以使用方
2023-06-17

C#怎么调用Dispose()方法

这篇文章主要讲解了“C#怎么调用Dispose()方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么调用Dispose()方法”吧!在向大家详细介绍C#调用Dispose()方法之前
2023-06-17

C#匿名方法怎么用

这篇文章将为大家详细讲解有关C#匿名方法怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C#匿名方法这是对变量范围的扩展。但是,下面例子说明了匿名参数还能够在它们的代码块之外执行命名方法:privat
2023-06-17

c#怎么调用java方法

在 c# 中调用 java 方法可以通过以下两种机制:使用 java native interface (jni):提供了在不同编程语言之间调用本地方法的接口。需手动加载 jvm、查找类和方法 id,并使用 jnienv 对象调用 java
c#怎么调用java方法
2024-05-12

C#中get方法怎么用

这篇文章给大家分享的是有关C#中get方法怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C#中属性是类,接口,结构的命名成员,可以通过C# get set访问器访问私有成员.如public class An
2023-06-17

C# String.IndexOf()方法怎么使用

C#中的String.IndexOf()方法用于在字符串中查找指定字符或子字符串的第一个匹配项,并返回其索引位置。该方法有多种重载形式,可以根据不同的需求使用。以下是常见的使用方式:1. 查找单个字符的索引位置:csharpstring s
2023-10-18

C#怎么使用Twain协议实现扫描仪连续扫描功能

本篇内容主要讲解“C#怎么使用Twain协议实现扫描仪连续扫描功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么使用Twain协议实现扫描仪连续扫描功能”吧!C#调用Twain接口实现扫
2023-06-26

win7任务栏怎么变透明方法介绍

win7任务栏怎么变透明呢,win7的aero主题相当不错,许多用户都很喜欢这类毛玻璃的感觉,但是有的用户想要把任务栏改为透明的,因而想要了解方法,下面就是win7任务栏怎么变透明方法介绍的内容,用户们可以依据下列的步骤操作就能很简单将任务
2023-07-17

C#怎么使用Task实现执行并行任务

这篇“C#怎么使用Task实现执行并行任务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#怎么使用Task实现执行并行任务
2023-07-05

win8系统卡任务栏怎么办?win8系统卡任务栏解决方法

win8总会出现任务栏卡死,显示内容固定在某个时间的状态,影响使用。跟大家分享一个半分钟就能恢复任务栏显示的方法。 方法/步骤 右键任务栏,取消锁定任务栏的勾选拖动任务栏上边缘将其拉宽几行,只要让任务栏中的图标发生变化就可以了。这时候就会发
2022-06-04

无法连接云服务器的任何端口怎么解决

正文无法连接云服务器端口的原因和解决方法无法连接云服务器端口可能是由防火墙阻止、端口未开放、网络问题、DNS问题或应用程序问题等原因造成的。解决方法包括允许端口入站访问、打开侦听端口、检查网络连接、验证DNS记录和排除应用程序错误。其他问题还包括端口冲突、权限问题和硬件问题。要调试连接问题,请检查防火墙规则、端口状态、网络连接、DNS解析、应用程序配置和日志。
无法连接云服务器的任何端口怎么解决
2024-04-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录