private void StartThread() { if (!_IsAlive) { lock (StartThreadLocker) { if (!_IsAlive) { new ThreadObject(() => { while (true) { while (_Items.Count > 0) { Item item; if (_Items.TryDequeue(out item)) { Flush(item); } } ThreadBridging.Sleep(3000); } }).Start(); _IsAlive = true; } } } }
protected JobStatus CheckTransitionalStatus() { if (Status == JobStatus.Suspending) { OnSuspending(); ChangeStatus(JobStatus.Suspended); while (Status != JobStatus.Resuming) { ThreadBridging.Sleep(1000); } } if (Status == JobStatus.Resuming) { OnResuming(); ChangeStatus(JobStatus.Executing); } if (Status == JobStatus.Terminating) { OnTerminating(); ChangeStatus(JobStatus.Stopped); } return(Status); }
public DbJob(string name, string description, int interval, string parameters) : base(name, description) { Interval = interval; foreach (var parameter in parameters.SplitByChar(';')) { var kv = parameter.SplitByChar(':'); if (kv.Length == 3) { Parameters.Add(new DbParameter() { Name = kv[0], Type = kv[1], Value = kv[2], }); } } Implement = (t) => { while (true) { var startTime = DateTime.Now; ThreadBridging.Retry(3, () => { try { AppDomainContainer.Instance.Resolve <IJob>(Name).Execute(); } catch (Exception e) { LoggerManager.GetLogger().LogEvent("DbJob", LoggerLevel.Error, string.Format("job {0} failed to execute.", Name), e); return(false); } return(true); }); LoggerManager.GetLogger().LogEvent("DbJob", LoggerLevel.Info, string.Format("job {0} finish to execute. cost: {1}", Name, (DateTime.Now - startTime).TotalSeconds)); if (CheckTransitionalStatus() == TaskObjectStatus.Sleep) { break; } ThreadBridging.Sleep(interval); } return(true); }; }
protected override void Implement() { while (true) { Console.WriteLine(string.Format("{0}: {1}", Name, Status)); ThreadBridging.Sleep(2000); var status = CheckTransitionalStatus(); if (status == JobStatus.Stopped) { break; } } }
public Deamon(string name, string description, int interval) : base(name, description) { StatusChangedTo += Deamon_StatusChangedTo; Implement = (t) => { while (true) { var startTime = DateTime.Now; ThreadBridging.Retry(3, () => { try { AppDomainContainer.Instance.Resolve <IDeviceDataSource>(Name).Execute(); } catch (Exception e) { LoggerManager.GetLogger().LogEvent("Deamon", LoggerLevel.Error, string.Format("deamon {0} failed to execute.", Name), e); return(false); } return(true); }); LoggerManager.GetLogger().LogEvent("Deamon", LoggerLevel.Info, string.Format("deamon {0} finish to execute. cost: {1}", Name, (DateTime.Now - startTime).TotalSeconds)); if (CheckTransitionalStatus() == TaskObjectStatus.Sleep) { break; } ThreadBridging.Sleep(interval); } return(true); }; }
static void AddDevices(int count) { var startTime = DateTime.Now; var i = 0; for (; i < count; i++) { var response = new RestTest().AddDevice(); if (response.HasError) { foreach (var error in response.Errors) { ConsoleBridging.WriteLine("Error: " + error.ErrorMessage); } } ThreadBridging.Sleep(20); } ConsoleBridging.WriteLine("count: " + i + "; cost: " + (DateTime.Now - startTime).TotalSeconds + "s"); ConsoleBridging.ReadAnyKey(); }