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.mzph.cn/news/860946.shtml

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

相关文章

邮件自动推送技术如何实现?有哪些优劣势?

邮件自动推送怎么设置&#xff1f;如何评估邮件自动推送的效果&#xff1f; 邮件自动推送是一种高效的电子邮件营销和通信技术&#xff0c;它能够根据预设条件自动发送邮件给特定的收件人。AokSend将深入探讨邮件自动推送技术的实现原理和注意事项。 邮件自动推送&#xff1a…

【PostgreSQL】数据基石:PostgreSQL的数据类型与表结构设计

目录 核心数据类型深入探索 基础数值与文本类型 日期与时间类型 特殊与复合类型 JSON与HSTORE 表的创建、修改与管理 创建与修改表结构 索引与性能优化 约束与数据完整性 核心数据类型深入探索 PostgreSQL以其多样化的数据类型著称&#xff0c;不仅包括标准SQL数据类型…

使用可蒸发的电介质流体冷却IGBT

每天一篇行业发展资讯&#xff0c;让大家更及时了解外面的世界。 更多资讯&#xff0c;请关注B站/公众号【莱歌数字】&#xff0c;有视频教程~~ 电子系统的单相液冷却已经广泛应用了50多年。 流体广泛应用于不同的工业&#xff1a;电力电子中的介质油&#xff1b;企业服务器…

微软Win10 22H2六月更新补丁KB5039299来了!附完整更新日志

系统之家于6月26日发出最新报道&#xff0c;微软为 Windows 10 用户发布了六月的安全更新补丁KB5039299。22H2用户升级系统后&#xff0c;会发现版本号升至 19045.4598。此次更新针对影响任务栏上应用跳转列表、默认日语输入法编辑器等多个问题进行修复。接下来跟随小编看看此次…

红酒哲学:品味流转时光,探寻生活之深邃奥秘

在繁华的都市中&#xff0c;我们时常被各种声音和色彩所包围&#xff0c;追求着速度与激情。然而&#xff0c;在这喧嚣之中&#xff0c;总有那么一刻&#xff0c;我们渴望静下心来&#xff0c;品味一份不同的宁静与深度。这时&#xff0c;一杯雷盛红酒便成了我们与内心对话的桥…

免费分享:中国1:250万地质图(附下载方法)

中国1&#xff1a;250万地质图反映了中国区域地质构造面貌和基本特征&#xff0c;表示了中国区域地质的特色&#xff0c;地质编图的标准化程度较高&#xff0c;地质图的编制过程中充分采用了信息技术&#xff0c;反映了地质调查与科研的若干新进展与认识。 数据简介 本数据为空…

lmdeploy部署chatglm3模型并对话

lmdeploy部署chatglm3模型并对话 环境准备创建虚拟环境安装组件下载模型 chat启动模型并对话启动成api_server服务并对话启动成gradio服务 环境准备 使用30% A100 来运行chatglm3模型&#xff0c;采用lmdeploy来启动。 创建虚拟环境 # 创建虚拟环境 conda create -n langcha…

node初始化设置(简单高效)

npm config set prefix "E:\nodejs\node_global" npm config set cache "E:\nodejs\node_cache" 我比较喜欢实用nrm&#xff0c;所以直接指定了nrm的路径

中国历史气象灾害预警数据集

中国历史气象灾害、预警风险区数据&#xff0c;包括&#xff1a;雷暴预警、大雾预警、洪涝风险、地质灾害趋势预测分区、山洪风险、森林火险、暴雨范围、大雨范围、地质风险、高温风险、低温冻害灾情、低温冷害和雪灾等。属性表包括各预警类型、具体时间、时效等。数据从国家突…

【八股系列】探索响应式布局的奥秘:关键技术与实战代码示例

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【为什么组件中的 data 必须是一个函数&#xff0c;然后 return 一个对象&#xff0c;而 new Vue 实例里&#xff0c;data 可以直接是一个对象&#xff1f;】 &#x1f3a0; …

使用 Elastic ELSER 和 Llama3 的 RAG(使用 Langchain)

在之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG”&#xff0c;我们讲到了如何使用 Liama3 来结合 Elastic ELSER 来进行 RAG。在今天的文章里&#xff0c;我们来详细使用一个 notebook 来展示如何在本地 Elasticsearch 部署中进行实现。 此交互式 notebook 使用 Langch…

人工智能在医学图像分割中的最新研究进展|顶刊速递·24-06-26

小罗碎碎念 今日推文主题——人工智能在医学图像分割领域中的最新研究进展。 今天的推文都来自同一个期刊——《Med Image Anal 》&#xff0c;最新的IF是10.7。 小罗观点 今天的六篇文献都是直接面向实际应用场景的&#xff0c;可以针对你自己的研究课题选择合适的文章进行阅读…

【学习】科大睿智解读ITSS通过后仍需关注和改进IT服务的原因

为了确保IT服务的质量和效率&#xff0c;很多企业拿到ITSS资质证书后&#xff0c;仍然需要持续关注和改进IT服务&#xff0c;科大睿智总结主要原因有以下几点&#xff1a; 1、随着企业发展业务和市场行情的变化&#xff0c;可能涉及到运维服务中新的业务流程、技术需求或者用户…

机器学习算法(三):支持向量机(SVM)的sklearn调用

文章目录 前言一 理论1 sklearn中的核函数形式二、sklearn调用1 svm.SVC() 接口说明三 、具体示例1、简单的线性SVM例子 --- 不同C值的影响(1) 数据集(2) svm sklearn调用2、高斯核函数的SVM --- 非线性分类(1) 数据集(2) 高斯核函数的SVM3、sklearn调参技术--网格搜索…

华为云x86架构下部署mysql

华为云x86架构下部署mysql 1. 配置X86架构ESC2. 查看本系统中有没有安装mariadb相关的组件&#xff0c;有则卸载3. 安装mysql4. 启动mysql5. 登录MySQL&#xff0c;修改密码&#xff0c;开放访问权限 1. 配置X86架构ESC 2. 查看本系统中有没有安装mariadb相关的组件&#xff0c…

从理论到实践:工业工厂室外可燃气体报警器的校准方法

随着工业工厂对安全生产要求的不断提高&#xff0c;可燃气体报警器作为防范火灾、爆炸事故的重要设备&#xff0c;其准确性和可靠性显得尤为重要。 特别是在室外环境中&#xff0c;由于气候条件多变、设备老化等因素的影响&#xff0c;可燃气体报警器的性能可能会发生变化。因…

grpc学习golang版( 二、入门示例)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 文章目录 一、环境二、编写protobuf文件三、编写server服务端四、编写服务端五、测试 一、环境 确保环境已经配置完成&#xff0c;效果如下。不同环境可能导致后续生成的效果不一。 go version protoc --version…

深度解析:ChatGPT是如何理解和生成自然语言文章的?

引言 随着人工智能的发展&#xff0c;ChatGPT作为一种先进的自然语言处理工具&#xff0c;正逐渐改变人们与技术交互的方式。那么&#xff0c;ChatGPT是如何理解和生成自然语言文章的&#xff1f;本文将从其技术原理、训练过程、实际应用等多个角度&#xff0c;深入解析这一过…

49、基于归一化感知器的输入向量分类(matlab)

1、基于归一化感知器的输入向量分类的原理及流程 归一化感知器是一种分类算法&#xff0c;其原理基于感知器算法&#xff0c;但是在输入向量上进行了归一化处理&#xff0c;以提高算法的性能和稳定性。 流程如下&#xff1a; 输入向量归一化&#xff1a;对每个输入向量进行归…

手机远程控制另一台手机的全新使用教程(安卓版)

看完这篇文章&#xff0c;你可以了解到安卓手机如何远程控制安卓手机&#xff0c;以及苹果手机如何远程控制安卓手机。 如果想要用安卓手机远程管控苹果手机&#xff0c;或者苹果手机远程管控另一台苹果手机&#xff0c;请点击查看视频《手机远程管控另一台手机的全新使用教程…