public void ScheduleWorkerTest() { var startTime = DateTime.Now; var timeStamps = new List <DateTime>(); var w = new ScheduleWorker(() => { timeStamps.Add(DateTime.Now); }, DateTime.Now.AddSeconds(5), TimeSpan.FromSeconds(5)); w.Start(); Thread.Sleep(TimeSpan.FromSeconds(16)); w.Stop(); Assert.AreEqual(3, timeStamps.Count); for (int i = 0; i < 3; i++) { var expectTime = startTime.AddSeconds((i + 1) * 5); var actualTime = timeStamps[i]; Assert.IsTrue(1 > Math.Abs((expectTime - actualTime).TotalSeconds)); } }
public static void StopScheduleThread() { try { if (_scheduleThreadAnalyticDebugOn) { ScheduleLog.Debug("Enter StopScheduleThread()"); } if (_scheduleThread != null) { if (_scheduleThreadAnalyticDebugOn) { ScheduleLog.Debug("Try to stop the _scheduleThread"); } _scheduleWorker.RequestStop(); _scheduleThread.Join(20000); _scheduleWorker = null; _scheduleThread = null; } else { if (_scheduleThreadAnalyticDebugOn) { ScheduleLog.Debug("_scheduleThread is not running"); } } if (_scheduleThreadAnalyticDebugOn) { ScheduleLog.Debug("Exit StopScheduleThread()"); } } catch (Exception ex) { ScheduleLog.Error("Exit StopScheduleThread() with Exception error: " + ex.Message); } }
public static void StartScheduleThread(HttpContext httpContext, IConfiguration configuration = null) { try { GetConfigParams(configuration); SetHttpRuntimeUrl(httpContext); if (_scheduleThreadAnalyticDebugOn) { ScheduleLog.Debug($"Enter StartScheduleThread() with User: [{httpContext?.User}], Enabled: [{_scheduleThreadEnabled}], WorkIntervalInMsec: [{_scheduleThreadWorkIntervalInMsec}], HttpRequestTimeOutMin: [{_scheduleThreadHttpRequestTimeOutMin}]" ); } //_log.DebugFormat("Found {0} Active Schedules.", schedules.Count); if (!_scheduleThreadEnabled) { if (_scheduleThreadAnalyticDebugOn) { ScheduleLog.Debug("Exit StartScheduleThread() !_scheduleThreadEnabled"); } return; } HttpContext lHttpContext = httpContext ?? Utilities.Web.GetContext(); if (_scheduleThread != null) { if (_scheduleThreadAnalyticDebugOn) { ScheduleLog.Debug("_scheduleThread is already running"); } return; } _scheduleWorker = new ScheduleWorker(Manager); _scheduleThread = new Thread(new ThreadStart(() => { #if NETFRAMEWORK HttpContext.Current = lHttpContext; _scheduleWorker.DoWork(); #else using (var scope = Manager.CreateThreadServiceScope()) { ServiceLocator.SetLocatorProvider(scope.ServiceProvider); _scheduleWorker.DoWork(); } #endif })); _scheduleThread.Start(); while (!_scheduleThread.IsAlive) { if (_scheduleThreadAnalyticDebugOn) { ScheduleLog.Debug("StartScheduleThread !_scheduleThread.IsAlive, wait....."); } Thread.Sleep(100); } if (_scheduleThreadAnalyticDebugOn) { ScheduleLog.Debug("Exit StartScheduleThread()"); } } catch (Exception ex) { ScheduleLog.Error("Exit StartScheduleThread()() with Exception error: " + ex.Message); } }