Beispiel #1
0
        static void Main(string[] args)
        {
            DateTime tempDateTime = DateTime.Now;

            Console.WriteLine("Started {0}", DateTime.Now.ToString());
            QueueItems queueItems = new QueueItems();

            while (queueItems.processItems.Count() > 0)
            {
                Parallel.For(0, queueItems.processItems.Count(),
                             index =>
                {
                    QueueItem toDoItems;
                    queueItems.processItems.TryDequeue(out toDoItems);
                    if (toDoItems != null)
                    {
                        if (toDoItems.Level == 0 || QueueItems.IsLevelDone(toDoItems.Level - 1))
                        {
                            ProcessItem(toDoItems);
                        }
                        else
                        {
                            queueItems.processItems.Enqueue(toDoItems);
                        }
                    }
                });
            }

            Console.WriteLine("Done {0}", DateTime.Now.ToString());
            Console.WriteLine("Total Time: {0}", DateTime.Now.Subtract(tempDateTime));
            Console.Read();
        }
Beispiel #2
0
        private static void ProcessItem(object state)
        {
            QueueItem queueItem = (QueueItem)state;

            Console.WriteLine("Process {0} has done item {1} Level {2}",
                              Thread.CurrentThread.GetHashCode(),
                              queueItem.QueueId,
                              queueItem.Level);

            Random random = new Random();

            Thread.Sleep(random.Next(100, 2000));

            QueueItems.SubFromLevel(queueItem.Level);
        }