Exemplo n.º 1
0
        //static QListener _queue=new QListener();

        static void Main(string[] args)
        {
            Console.WriteLine("QueueTasksDemo started...");

            var watch = Stopwatch.StartNew();

            QueueListener <LogItem> _queue = new QueueListener <LogItem>(MessageReceivedAction <LogItem>);

            //_queue.MessageReceived += new MControl.Generic.GenericEventHandler<LogItem>(_queue_MessageReceived);
            _queue.Start();

            int counter = 0;
            int items   = 0;

            while (_queue.IsAlive)
            {
                if (++counter > 200)
                {
                    break;
                }
                // Add some log messages in parallel...

                Task.Factory.StartNew(() => _queue.Enqueue(new LogItem("Log from task A")));
                Task.Factory.StartNew(() => _queue.Enqueue(new LogItem("Log from task B")));
                Task.Factory.StartNew(() => _queue.Enqueue(new LogItem("Log from task B1")));
                Task.Factory.StartNew(() => _queue.Enqueue(new LogItem("Log from task C")));
                Task.Factory.StartNew(() => _queue.Enqueue(new LogItem("Log from task D")));
                items += 5;
                // Pretend to do other things...
                Thread.Sleep(100);
            }

            while (_queue.Count > 0)
            {
                Thread.Sleep(100);
            }

            //_queue.Start();

            //QTest.Invoke(_queue,200);

            watch.Stop();

            Console.WriteLine("Duration: {0}", watch.ElapsedMilliseconds);

            Console.WriteLine("Items per second : {0}", (float)items / (watch.ElapsedMilliseconds / 1000));

            Console.WriteLine("QueueTasksDemo waiting...");

            Console.ReadKey();

            _queue.Stop();

            Console.WriteLine("QueueTasksDemo finished...");

            Console.ReadKey();
        }