/// <summary> /// Call center version 1 demo. /// </summary> private static void CallCenter1Demo() { WriteLine("CALL CENTER 1"); WriteLine(); ICallCenter callCenter = new CallCenter1(); callCenter.Call(1234); callCenter.Call(5678); callCenter.Call(1468); callCenter.Call(9641); while (callCenter.AreCallsWaiting) { var call = callCenter.Answer("Marcin"); $"Call #{call.Id} from client {call.ClientId} is answered by consultant {call.Consultant}.".Log(); Thread.Sleep(_random.Next(1000, 10000)); callCenter.End(call); $"Call #{call.Id} from {call.ClientId} is ended by {call.Consultant}.".Log(); } WriteLine(); }
/// <summary> /// Call center version 2 (concurrent) demo. /// </summary> private static void CallCenter2Demo() { WriteLine("CALL CENTER 2"); WriteLine(); WriteLine("(Press any key to cancel)"); WriteLine(); ICallCenter callCenter = new CallCenter1(); using (var cts = new CancellationTokenSource()) { Parallel.Invoke( new ParallelOptions { CancellationToken = cts.Token }, () => CallerAction(callCenter, cts.Token), () => ConsultantAction(callCenter, "Marcin", ConsoleColor.Red, cts.Token), () => ConsultantAction(callCenter, "James", ConsoleColor.Yellow, cts.Token), () => ConsultantAction(callCenter, "Olivia", ConsoleColor.Green, cts.Token), () => { ReadKey(true); ConsoleColor.Cyan.UseFore(() => WriteLine("Canceling ...")); cts.Cancel(); } ); Thread.Sleep(500); } WriteLine(); }