1

在对 NServiceBus 使用 Schedule 方法时,我发现在经过的作业之间存在一致的延迟。如果我将间隔设置为一分钟。下一个工作不会在一分钟后发生,而是额外延迟了 5 秒。

如果我将时间间隔设置为仅一秒,那么额外的延迟也会缩小到仅 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)] - 计划开始:2013 年 3 月 26 日下午 12:20:58,00:01:04.9931640 延迟

2013-03-26 12:22:03,514 [19] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:22:03,00:01:05.0302735 延迟

2013-03-26 12:23:08,532 [4] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:23:08,00:01:05.0185546 延迟

2013-03-26 12:24:13,553 [3] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:24:13,00:01:05.0206625 延迟

2013-03-26 12:25:18,577 [4] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:25:18,00:01:05.0244141 延迟

2013-03-26 12:26:24,451 [22] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:26:24,00:01:05.8740234 延迟

2013-03-26 12:27:28,695 [3] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:27:28,00:01:04.2441406 延迟

2013-03-26 12:28:33,739 [22] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:28:33,00:01:05.0439454 延迟

2013-03-26 12:29:38,753 [4] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:29:38,00:01:05.0138266 延迟

2013-03-26 12:30:39,029 [19] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:30:39,00:01:00.2757029 延迟

2013-03-26 12:31:43,878 [19] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:31:43,00:01:04.8492417 延迟

2013-03-26 12:32:48,951 [4] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:32:48,00:01:05.0732422 延迟

2013-03-26 12:33:53,950 [3] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:33:53,00:01:04.9990235 延迟

2013-03-26 12:34:58,950 [3] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:34:58,00:01:04.9999930 延迟

2013-03-26 12:36:03,950 [3] INFO RollingFileAppender [(null)] - 计划开始:3/26/2013 12:36:03 PM,00:01:05 延迟

2013-03-26 12:37:08,970 [22] INFO RollingFileAppender [(null)] - 计划开始:3/26/2013 12:37:08 PM,00:01:05.0195313 延迟

2013-03-26 12:38:10,185 [22] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:38:10,00:01:01.2150069 延迟

2013-03-26 12:39:14,354 [3] INFO RollingFileAppender [(null)] - 计划开始:2013 年 3 月 26 日下午 12:39:14,00:01:04.1694596 延迟

4

1 回答 1

2

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

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

于 2013-03-27T00:03:48.363 回答