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,一经查实,立即删除!

相关文章

微信小程序4种弹框

1、wx.showModal 确认弹框 delete(){wx.showModal({title: ,content: 是否确认删除,success(res) {if (res.confirm) {console.log(用户点击确定)} else if (res.cancel) {console.log(用户点击取消)}}})} 2、wx.showToast 提示弹框 success显示成功图标error显示失败图标load…

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

邮件自动推送怎么设置&#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。此次更新针对影响任务栏上应用跳转列表、默认日语输入法编辑器等多个问题进行修复。接下来跟随小编看看此次…

GPT-5:博士级大语言模型重塑工作与生活的未来

随着人工智能技术的飞速发展&#xff0c;新一代大语言模型GPT-5即将闪亮登场。作为博士级别的智能语言模型&#xff0c;GPT-5不仅代表了自然语言处理领域的最新成就&#xff0c;更预示着我们的工作和日常生活将迎来一场深刻的变革。 一、GPT-5带来的深远影响 GPT-5的登场&…

主机服务器被入侵怎么办

主机服务器被入侵怎么办?在数字化时代&#xff0c;主机安全是企业运营不可或缺的一环。然而&#xff0c;随着网络攻击手段的不断升级&#xff0c;主机被入侵的风险也日益增加。一旦主机被入侵&#xff0c;不仅可能导致数据泄露、业务中断&#xff0c;还可能对企业声誉和利益造…

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

在繁华的都市中&#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…

关于bash脚本中extglob不生效的问题

在bash脚本中&#xff0c;我们可以通过&#xff1a; shopt -s extglob 为后续代码提供通配功能。 但如果在block中设置&#xff0c;将不会生效。如&#xff1a; if true; thenshopt -s extglob... fi这是因为&#xff1a; you cannot put shopt -s extglob inside a statement…

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;可能涉及到运维服务中新的业务流程、技术需求或者用户…

使用Java实现分布式文件系统

使用Java实现分布式文件系统 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们来探讨如何使用Java实现一个分布式文件系统。随着数据量的爆炸…

机器学习算法(三):支持向量机(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…