public void Run() { // On init chaque "employé" foreach (IBusinessProcess businessProcess in _employees) { businessProcess.Init(); } while (true) { try { for (int i = 0; i < _employees.Count; i++) { // On fait travailler chaque employé à tour de role, tant qu'ils ont du travail if (!WorkerRole.ShouldStop && _employees[i].Work()) { // i=-1 : pour se concentrer sur une tâche en particulier i = -1; CustomSleeper.Reset(); } } // If I have not to work or no work Sleep(); } catch (Exception e) { LogException(e, LogsTypes.DevFailure); // 2 minutes au bagne, il n'y a pas a en avoir ici. Thread.Sleep(2 * 60 * 1000); } } //function (have to) never return ! }
protected virtual void Sleep() { CustomSleeper.Increment(); Trace.WriteLine("Thread " + Name + ", no more message, sleep " + CustomSleeper.TimeToSleep + "s", EnumUtils.AsString(LogsTypes.Verbatile)); CustomSleeper.Sleep(); }