C# 任务调度 c# TaskScheduler

摘要


在C#中,TaskScheduler是一种非常有用的功能,它允许您在指定的时间或间隔内执行任务。TaskScheduler是一个抽象类,它提供了一个通用的方法来计划和执行任务。您可以使用TaskScheduler来调度多个任务,并且在多线程环境中控制它们的执行。

正文


写一个继承TaskScheduler的类

public class MyScheduler : TaskScheduler{    protected override void QueueTask(Task task)    {        // 将任务排队到线程池中        ThreadPool.QueueUserWorkItem(_ => TryExecuteTask(task));    }
    protected override bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued)    {        // 如果当前线程是调度器的线程,则在当前线程内执行任务        if (taskWasPreviouslyQueued && Thread.CurrentThread.IsThreadPoolThread)            return TryExecuteTask(task);
        return false;    }
    protected override IEnumerable<Task> GetScheduledTasks()    {        // 此方法用于调度器的内部追踪,不要求实现        return Enumerable.Empty<Task>();    }}
 

在界面中定时调用​​​​​​​

public partial class Form1 : Form{    public Form1()    {        InitializeComponent();    }
    private async void btnStart_Click(object sender, EventArgs e)    {        // 创建一个任务调度器        var taskScheduler = new MyScheduler();
        // 计划执行任务        var startTime = DateTime.Now.AddSeconds(5); // 5秒后开始执行第一次任务        var interval = TimeSpan.FromSeconds(3); // 每隔3秒重复执行一次任务        ScheduleTask(taskScheduler, () => DoTask("计划任务"), startTime, interval);
    }    private void ScheduleTask(TaskScheduler scheduler, Action action, DateTime startTime, TimeSpan interval)    {        Task.Factory.StartNew(async () =>        {            var delay = startTime - DateTime.Now;            if (delay.TotalMilliseconds > 0)                Thread.Sleep(delay);
            while (true)            {                action();
                // 等待指定的时间间隔                await Task.Delay(interval);            }        }, CancellationToken.None, TaskCreationOptions.LongRunning, scheduler);    }
    private void DoTask(string taskName)    {        this.Invoke(() =>        {            txt.AppendText($"{taskName} executed at: {DateTime.Now}");            txt.AppendText(System.Environment.NewLine);        });
    }
}
 

图片

我们已经创建了一个自定义的任务调度器 MyScheduler,可以执行预定的任务。通过调用 ScheduleTask`方法,我们将任务添加到调度器中。在这个例子中,我们将在5秒后开始执行任务,并且每隔3秒重复执行一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/361016.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建github个人博客

文章目录 安装Hexo安装git安装Node.js安装 Hexo git配置SSH key配置ssh 搭建个人博客新建博客生成静态网页 本文主要参考 【保姆级】利用Github搭建自己的个人博客&#xff0c;看完就会 安装Hexo 参考官方文档&#xff1a;https://hexo.io/zh-cn/docs/ Hexo 是一个快速、简洁且…

【STM32】USART串口通讯

1.USART简介 STM32芯片具有多个USART外设用于串口通讯&#xff0c;它是 Universal Synchronous Asynchronous Receiver and Transmitter的缩写&#xff0c; 即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。有别于USART&#xff0c; 它还有具有UART外设(Univers…

6.18 多态

多态相较于继承是更加重要的体现面向对象的特征。 多态&#xff1a; 同一个消息、同一种调用&#xff0c;在不同的场合&#xff0c;不同的情况下&#xff0c;执行不同的行为 。 背景需求&#xff1a;继承是实现可以在圆柱或者圆锥中复用圆的特征&#xff0c;多态是可以通过一…

东南亚本地化游戏

通常&#xff0c;亚洲电子游戏市场首先与中国联系在一起。但最近&#xff0c;分析人士越来越关注一个邻近地区&#xff1a;东南亚。而且有充分的理由。 该地区包括中南半岛、马来群岛和邻近岛屿上的十一个国家。1967年&#xff0c;其中10个国家&#xff08;除东帝汶外&#xf…

反射及动态代理

反射 定义&#xff1a; 反射允许对封装类的字段&#xff0c;方法和构造 函数的信息进行编程访问 图来自黑马程序员 获取class对象的三种方式&#xff1a; 1&#xff09;Class.forName("全类名") 2&#xff09;类名.class 3) 对象.getClass() 图来自黑马程序员 pac…

2024广东省职业技能大赛云计算赛项实战——构建CICD

构建CI/CD 前言 题目如下&#xff1a; 构建CI/CD 编写流水线脚本.gitlab-ci.yml触发自动构建&#xff0c;具体要求如下&#xff1a; &#xff08;1&#xff09;基于镜像maven:3.6-jdk-8构建项目的drone分支&#xff1b; &#xff08;2&#xff09;构建镜像的名称&#xff1a…

Qt | 子类化 QStyle(Qt自带图标大全)

01、简介 1、把绘制自定义部件外观的步骤大致分为三大板块,如下: ①、样式元素:即指定需要绘制的图形元素(比如焦点框、按钮,工具栏等)。样式元素使 用 QStyle 类中的一系列枚举(共有 11 个枚举)进行描述。 ②、样式选项:包含了需要绘制的图形元素的所有信息,比如包含…

DDR3控制器(一)DDR3 IP调用

目录 一、DDR3 IP核简介 二、DDR3 IP核调用 在千兆以太网通信中用到了DDR3控制器&#xff0c;但是并没有对其做相关介绍。这次准备重新整理一下DDR3控制相关知识&#xff0c;复习巩固一下。 一、DDR3 IP核简介 MIG IP核&#xff08;Memory Interface Generator&#xff09;是…

【ajax基础04】form-serialize插件

目录 一&#xff1a;form-serialize插件 作用&#xff1a; 语法格式&#xff1a; 一&#xff1a;form-serialize插件 作用&#xff1a; 快速且大量的收集表单元素的值 例如上图对于多表单元素的情形&#xff0c;单靠通过”选择器获取节点.value”值的形式&#xff0c;获取…

QEMU + Vscode + Arm Arch‘s Linux调试小记

目录 下载QEMU 下载aarch64-gcc 下载BusyBox 编译linux 6.9.5的内核 启动&#xff01; 链接到vscode进行远程调试 Reference 前几天看到了一篇讲授如何调试ARM Linux内核的文章&#xff0c;这里现在记录一下调试ARM Linux内核的办法 下载QEMU 对于Arch Linux用户而言&a…

如何集成CppCheck到visual studio中

1.CPPCheck安装 在Cppcheck官方网站下载最新版本1.70&#xff0c;官网链接&#xff1a;http://cppcheck.sourceforge.net/ 安装Cppcheck 2.集成步骤 打开VS&#xff0c;菜单栏工具->外部工具->添加&#xff0c;按照下图设置&#xff0c;记得勾选“使用输出窗口” 2.…

考研数学一有多难?130+背后的残酷真相

考研数学一很难 大家平时在网上上看到很多人说自己考了130&#xff0c;其实这些人只占参加考研数学人数的极少部分&#xff0c;有个数据可以展示出来考研数学到底有多难&#xff1a; 在几百万考研大军中&#xff0c;能考到120分以上的考生只有2%。绝大多数人的分数集中在30到…

回购注销高管减持,东软集团的“大手笔”有意义吗?

文&#xff1a;互联网江湖 作者&#xff1a;刘致呈 作为老牌软件巨头&#xff0c;东软集团这两年的业绩着实有些不够看。 看财报数据&#xff0c;22年东软集团营收94.66亿&#xff0c;净亏损3.47亿&#xff0c;扣非净利利润-5.30亿。23年&#xff0c;集团营收105.44亿&#x…

华为OD机试【高矮个子排队】(java)(100分)

1、题目描述 现在有一队小朋友&#xff0c;他们高矮不同&#xff0c;我们以正整数数组表示这一队小朋友的身高&#xff0c;如数组{5,3,1,2,3}。 我们现在希望小朋友排队&#xff0c;以“高”“矮”“高”“矮”顺序排列&#xff0c;每一个“高”位置的小朋友要比相邻的位置高或…

5000天后的世界:科技引领的未来之路

**你是否想过&#xff0c;5000天后的世界会是什么样子&#xff1f;** 科技日新月异&#xff0c;改变着我们的生活方式&#xff0c;也引领着人类文明的进程。著名科技思想家凯文凯利在他的著作《5000天后的世界》中&#xff0c;对未来进行了大胆的预测。 **这本书中&#xff0c…

SpringBoot学习04-[定制SpringMVC]

定制SpringMVC 定制SpringMvc的自动配置定制springmvc-configurePathMatch配置 定制SpringMvc的自动配置 SpringMvc的自动配置类&#xff1a;WebMvcAutoConfiguration 1、在大多数情况下&#xff0c;SpringBoot在自动配置中标记了很多ConditionalOnMissingBean&#xff0c;我们…

智慧互联:Vatee万腾平台展现科技魅力

随着科技的迅猛发展&#xff0c;我们的生活正逐渐变得智能化、互联化。在这个信息爆炸的时代&#xff0c;一个名为Vatee万腾的平台正以其独特的魅力&#xff0c;引领我们走向一个更加智能的未来。 Vatee万腾&#xff0c;这个名字本身就充满了对科技未来的憧憬与期待。作为一家专…

吴恩达揭秘:编程Agent如何革新软件开发行业

作为 AI 领域的杰出人物&#xff0c;吴恩达教授对编程 Agent 的兴起表示了极大的兴趣。他认为&#xff0c;编程 Agent 有潜力通过自动执行繁琐的任务、提高代码质量和加速开发周期来彻底改变软件开发行业。 本文将深入探讨吴恩达对编程 Agent 的见解&#xff0c; 多代理系统质…

Vmvare12安装CentOS7.6

Vmvare12安装 注意事项 安装完成以后有这两个虚拟网卡。 CentOS官网镜像地址 https://www.centos.org/download/mirrors/Vmvare安装CentOS7.6 创建虚拟机 安装CentOS7.6 选择桌面版 磁盘分区 上述是确认使用自动分区。 设置密码 设置license information 欢迎页面 CentOS7…

web前端大作业--美团外卖1

文章目录 概述代码截图代码链接 概述 web美团 登录和注册功能、页面展示。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href&quo…