Пример #1
0
        /// <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();
        }
Пример #2
0
        /// <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();
        }