static void SimulateServiceFailure(Object source, ElapsedEventArgs e) { ServiceSession serviceSession = ServiceSession.Instance; lock (serviceSession.data._workLock) { Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("******* Service Went down please wait 20 seconds... **********"); Console.WriteLine(); Thread.Sleep(20000); serviceSession.SetNumberOfThreads(maxThreads += 2); Console.WriteLine($"******* SetNumberOfThreads to |{maxThreads}|... **********"); Console.WriteLine("******* Service is up and Running... **********"); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); } }
static void SimulateThreadJob(object i) { ServiceSession serviceSession = ServiceSession.Instance; lock (serviceSession.data._workLock) { //Console.WriteLine(i + " wants to enter"); serviceSession.data.Semaphore.Wait(); Console.WriteLine($"Currently Runing Thread:[{i}]"); //Console.WriteLine("Notify Publisher about failed Service..."); serviceSession.Notify(!serviceSession.data.serviceAvailable); Thread.Sleep(100); //Console.WriteLine(i + " is leaving"); // a time. Console.WriteLine($"SimulateThreadJob - Semaphore Number Of Threads{serviceSession.data.Semaphore.CurrentCount},maxThreads={maxThreads} "); if (serviceSession.data.Semaphore.CurrentCount != maxThreads) { serviceSession.data.Semaphore.Release(); } } }