stevenjin 2024-10-12 14:23 采纳率: 98%
浏览 1
已结题

quazrtz.net中可以用sleep吗?

环境:quazrtz.net实现,asp.net core mvc
一个计划分内外两层,类似大循环套小循环。当前一个内外两层循环执行完成后,依次进入下一个内外两层循环(内外两层非无限)。
1.外层:等待N分钟,开灯N分钟后关闭。再等待N分钟,进入下一步。
2.下一步:如果有内层,则:等待N分钟,开灯N分钟后关闭(等待时间与上一步的等待时间累加)。
以上有执行次数;如果没有内层,等待N分钟后,进入下一个同样的内外两层循环。

问题.以下是内循环。因为有多个相似的内外循环要依次执行,都用了Thread.Sleep,不知会阻塞整个计划吗?正确用法是怎样呢?


public class LightJob : IJob
{
    public Task Execute(IJobExecutionContext context)
    {
        // 模拟开灯操作
        Console.WriteLine("Light is turned on.");
        // 模拟等待一段时间(例如使用Thread.Sleep)
        Thread.Sleep(TimeSpan.FromMinutes(context.JobDetail.JobDataMap.GetIntValue("openTime"))); // 获取配置的开灯时间参数
        // 模拟关灯操作
        Console.WriteLine("Light is turned off.");
        return Task.CompletedTask; // 表示任务完成
    }
}
  • 写回答

3条回答 默认 最新

  • Fei Xu 2024-10-14 14:14
    关注

    在 Quartz.NET 中,使用 Thread.Sleep 是不推荐的做法,因为它会阻塞当前线程,导致调度器无法有效利用线程池的资源,从而影响其他任务的调度和执行。

    Quartz.NET 是一个基于调度任务执行的库,使用 Thread.Sleep 会阻塞当前任务的线程,降低调度器的性能。Quartz.NET 的默认配置使用有限数量的线程来执行所有调度的任务,如果某个任务阻塞了一个线程,其他任务可能会因此被延迟执行,甚至在线程池耗尽时无法执行。

    为了避免阻塞调度线程,应使用异步的方式来处理任务等待。可以使用 Task.Delay 替代 Thread.Sleep,这样不会阻塞线程,而是异步地等待一段时间。代码改进如下:

    public class LightJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            // 模拟开灯操作
            Console.WriteLine("Light is turned on.");
    
            // 使用异步的 Task.Delay 代替 Thread.Sleep
            int openTime = context.JobDetail.JobDataMap.GetIntValue("openTime");
            await Task.Delay(TimeSpan.FromMinutes(openTime));
    
            // 模拟关灯操作
            Console.WriteLine("Light is turned off.");
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月18日
  • 已采纳回答 10月18日
  • 创建了问题 10月12日

悬赏问题

  • ¥60 Matlab联合CRUISE仿真编译dll文件报错
  • ¥15 脱敏项目合作,ner需求合作
  • ¥15 脱敏项目合作,ner需求合作
  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId