当使用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延迟
答案 0 :(得分:2)
5秒的延迟是因为我们实际上每5秒轮询一次,见this code
我在gihub中提出了一个问题来解决这个问题,请参阅https://github.com/NServiceBus/NServiceBus/issues/1077
如果您设置间隔<= 1秒,那么您将不会有5秒延迟,因为我们绕过轮询并立即执行该代码,请参阅this code。
因此0.7秒延迟是直接执行的代码。