时间延迟使用NServiceBus的Schedule

时间:2013-03-26 19:54:02

标签: c# delay nservicebus

当使用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 PM,00:01:04.9931640延迟

     

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

     

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

     

2013-03-26 12:24:13,553 [3] INFO RollingFileAppender [(null)] - 开始   时间表:2013年3月26日12:24:13 PM,00:01:05.0206625延迟

     

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

     

2013-03-26 12:26:24,451 [22] INFO RollingFileAppender [(null)] -   附表开始时间:2013年3月26日下午12:26:24,0:01:05.8740234延迟

     

2013-03-26 12:27:28,695 [3] INFO RollingFileAppender [(null)] - 开始   时间表:2013年3月26日12:27:28 PM,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 PM,00:01:05.0138266延迟

     

2013-03-26 12:30:39,029 [19] INFO RollingFileAppender [(null)] -   开始时间表:2013年3月26日12:30:39 PM,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 PM,00:01:05.0732422延迟

     

2013-03-26 12:33:53,950 [3] INFO RollingFileAppender [(null)] - 开始   时间表:2013年3月26日12:33:53 PM,00:01:04.9990235延迟

     

2013-03-26 12:34:58,950 [3] INFO RollingFileAppender [(null)] - 开始   时间表:2013年3月26日12:34:58 PM,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)] -   时间表开始日期:2013年3月26日下午12:37:08,09: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 PM,00:01:04.1694596延迟

1 个答案:

答案 0 :(得分:2)

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

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