NServiceBus使用Schedule定时延迟

本文关键字:延迟 定时 Schedule 使用 NServiceBus | 更新日期: 2023-09-27 18:06:04

当为NServiceBus使用Schedule方法时,我看到在经过的作业之间存在一致的延迟。如果我把间隔设为1分钟。而不是看到下一个任务正好在一分钟后发生,似乎有额外的5秒延迟。

如果我将间隔设置为1秒,那么额外的延迟也会缩小到0.7秒。一分钟后,延迟仍然停留在5秒左右。

下面是使用分钟间隔的代码片段:

previousTime = DateTime.Now.TimeOfDay;            
Schedule.Every(TimeSpan.FromSeconds(60)).Action(() =>
{
    DateTime currentTime = DateTime.Now;
    ServiceBus.WriteToLog(string.Format("Start of Schedule: {0}, {1} delay", currentTime, currentTime.TimeOfDay - previousTime));
    previousTime = DateTime.Now.TimeOfDay;
});

这是我的日志中的一个片段:

2013-03-26 12:20:58,483 [3] INFO RollingFileAppender [(null)] -开始时间表:3/26/2013 12:20:58 PM, 00:01:04.9931640 delay

2013-03-26 12:22:03,514 [19] INFO RollingFileAppender [(null)] -Start of Schedule: 3/26/2013 12:22:03 PM, 00:01:05.0302735 delay

2013-03-26 12:23:08 . 532 [4] INFO RollingFileAppender [(null)] -开始时刻表:3/26/2013 12:23:08 PM, 00:01:05.0185546 delay

2013-03-26 12:24:13 553 [3] INFO RollingFileAppender [(null)] -开始时刻表:3/26/2013 12:24:13 PM, 00:01:05.0206625 delay

2013-03-26 12:25:18 . 577 [4] INFO RollingFileAppender [(null)] -开始时刻表:3/26/2013 12:25:18 PM, 00:01:05.0244141 delay

2013-03-26 12:26:24,451 [22] INFO RollingFileAppender [(null)] -Start of Schedule: 3/26/2013 12:26:24 PM, 00:01:05.8740234 delay

2013-03-26 12:27:28,695 [3] INFO RollingFileAppender [(null)] -开始时间:3/26/2013 12:27:28 PM, 00:01:04.2441406 delay

2013-03-26 12:28:33,739 [22] INFO RollingFileAppender [(null)] -Start of Schedule: 3/26/2013 12:28:33 PM, 00:01:05.0439454 delay

2013-03-26 12:29:38,753 [4] INFO RollingFileAppender [(null)] -开始时刻表:3/26/2013 12:29:38 PM, 00:01:05.0138266 delay

2013-03-26 12:30:39,029 [19] INFO RollingFileAppender [(null)] -Start of Schedule: 3/26/2013 12:30:39 PM, 00:01:00.2757029 delay

2013-03-26 12:31:43 . 878 [19] INFO RollingFileAppender [(null)] -Start of Schedule: 3/26/2013 12:31:43 PM, 00:01:04.8492417 delay

2013-03-26 12:32:48,951 [4] INFO RollingFileAppender [(null)] -开始时间表:3/26/2013 12:32:48 PM, 00:01:05.0732422 delay

2013-03-26 12:33:53,950 [3] INFO RollingFileAppender [(null)] -开始时刻表:3/26/2013 12:33:53 PM, 00:01:04.9990235 delay

2013-03-26 12:34:58,950 [3] INFO RollingFileAppender [(null)] -开始时刻表:3/26/2013 12:34:58 PM, 00:01:04.9999930 delay

2013-03-26 12:36:03950 [3] INFO RollingFileAppender [(null)] -开始时刻表:3/26/2013 12:36:03 PM, 00:01:05 delay

2013-03-26 12:37:08,970 [22] INFO RollingFileAppender [(null)] -Start of Schedule: 3/26/2013 12:37:08 PM, 00:01:05.0195313 delay

2013-03-26 12:38:10 . 85 [22] INFO RollingFileAppender [(null)] -开始时间:2013年3月26日12:38:10 PM, 00:01:01.2150069 delay

2013-03-26 12:39:14 . 354 [3] INFO RollingFileAppender [(null)] -开始时间表:3/26/2013 12:39:14 PM, 00:01:04.1694596 delay

NServiceBus使用Schedule定时延迟

5秒的延迟是因为我们实际上每5秒才轮询一次,参见下面的代码
我在gihub中提出了一个问题来解决这个问题,请参阅https://github.com/NServiceBus/NServiceBus/issues/1077

如果您设置间隔<= 1秒,那么您将不会有5秒的延迟,因为我们绕过轮询并直接执行该代码,参见以下代码。
所以0.7秒的延迟是代码直接执行。