static void Multiple()
        {
            var rnd = new Random();

            Task.Run(() =>
            {
                for (int i = 1; i <= 10; i++)
                {
                    ObservableConcurrentQueue.Enqueue(i + rnd.Next(0, 2000));
                    Thread.Sleep(rnd.Next(0, 2000));
                }
            });

            Task.Run(() =>
            {
                for (int i = 1; i <= 10; i++)
                {
                    ObservableConcurrentQueue.Enqueue(i + rnd.Next(0, 2000));
                    Thread.Sleep(rnd.Next(0, 2000));
                }
            });

            Task.Run(() =>
            {
                for (int i = 1; i <= 10; i++)
                {
                    ObservableConcurrentQueue.Enqueue(i + rnd.Next(0, 2000));
                    Thread.Sleep(rnd.Next(0, 2000));
                }
            });
        }
        /// <summary>
        ///     Enqueues the event test.
        /// </summary>
        private void EnqueueEventTest()
        {
            const int item = 11;

            _queue.Enqueue(item);
            Assert.AreEqual(item, _queueAddedItem);
            Assert.IsFalse(_isQueueEmpty);

            _queue.Enqueue(item + 1);
            Assert.AreEqual(item + 1, _queueAddedItem);
            Assert.IsFalse(_isQueueEmpty);
        }
예제 #3
0
        void SampleData(object state)
        {
            if (q.Count > 200)
            {
                return;
            }

            q.Enqueue($"Hello World {QCount++}");
            //      Debug.WriteLine($"Queued {QCount}");
        }
예제 #4
0
        private async void ReceiveC2dAsync(DeviceClient deviceClient)
        {
            while (true)
            {
                try {
                    Message receivedMessage = await deviceClient.ReceiveAsync();

                    if (receivedMessage == null)
                    {
                        await Task.Delay(2000);

                        continue;
                    }

                    await deviceClient.CompleteAsync(receivedMessage);

                    string command = Encoding.ASCII.GetString(receivedMessage.GetBytes()).ToUpper();

                    q.Enqueue(command);

                    if (telemetry.SetSampleRateInSeconds(command))
                    {
                        continue;
                    }

                    switch (command[0])
                    {
                    case 'R':
                        statusColour = Colors.Red;
                        break;

                    case 'G':
                        statusColour = Colors.Green;
                        break;

                    case 'B':
                        statusColour = Colors.Blue;
                        break;

                    case 'Y':
                        statusColour = Colors.Yellow;
                        break;

                    default:
                        statusColour = Colors.Purple;
                        break;
                    }

                    display.Fill(statusColour);
                    display.Update();
                }
                catch { telemetry.Exceptions++; }
            }
        }
예제 #5
0
        /// <summary>
        /// The main.
        /// </summary>
        /// <param name="args">
        /// The args.
        /// </param>
        private static void Main(string[] args)
        {
            var observableConcurrentQueue = new ObservableConcurrentQueue <int>();

            observableConcurrentQueue.ContentChanged += OnObservableConcurrentQueueContentChanged;
            var task = new Task(
                () =>
            {
                Console.WriteLine("Enqueue elements...");
                for (int i = 1; i <= 20; i++)
                {
                    observableConcurrentQueue.Enqueue(i);
                    Thread.Sleep(100);
                }

                int item;

                Console.WriteLine("Peek & Dequeue 5 elements...");
                for (int i = 0; i < 5; i++)
                {
                    observableConcurrentQueue.TryPeek(out item);
                    Thread.Sleep(300);
                    observableConcurrentQueue.TryDequeue(out item);
                    Thread.Sleep(300);
                }

                observableConcurrentQueue.TryPeek(out item);
                Thread.Sleep(300);

                Console.WriteLine("Dequeue all elements...");
                while (observableConcurrentQueue.TryDequeue(out item))
                {
                    Thread.Sleep(300);
                }
            });

            task.Start();
            Console.WriteLine("End. Press any key to exit...");
            Console.ReadKey(true);
        }
예제 #6
0
        private static async Task TryItWithThreadSafeAsync()
        {
            var observableConcurrentQueue = new ObservableConcurrentQueue <int>();

            observableConcurrentQueue.ContentChanged += OnObservableConcurrentQueueContentChanged;
            await Task.Run(() =>

            {
                Console.WriteLine("Enqueue elements...");
                Parallel.For(1, 20, i => { observableConcurrentQueue.Enqueue(i); });

                int item;

                Console.WriteLine("Peek & Dequeue 5 elements...");
                Parallel.For(0, 5, i =>
                {
                    observableConcurrentQueue.TryPeek(out item);
                    Thread.Sleep(300);
                    observableConcurrentQueue.TryDequeue(out item);
                });

                Thread.Sleep(300);

                observableConcurrentQueue.TryPeek(out item);
                Thread.Sleep(300);

                Console.WriteLine("Dequeue all elements...");

                Parallel.For(1, 20, i =>
                {
                    while (observableConcurrentQueue.TryDequeue(out item))
                    {
                        // NO SLEEP, Force Concurrence
                        // Thread.Sleep(300);
                    }
                });
            }
                           );
        }
예제 #7
0
        /// <summary>
        /// The main.
        /// </summary>
        /// <param name="args">
        /// The args.
        /// </param>
        private static void Main(string[] args)
        {
            var observableConcurrentQueue = new ObservableConcurrentQueue<int>();
            observableConcurrentQueue.ContentChanged += OnObservableConcurrentQueueContentChanged;
            var task = new Task(
                () =>
                    {
                        Console.WriteLine("Enqueue elements...");
                        for (int i = 1; i <= 20; i++)
                        {
                            observableConcurrentQueue.Enqueue(i);
                            Thread.Sleep(100);
                        }

                        int item;

                        Console.WriteLine("Peek & Dequeue 5 elements...");
                        for (int i = 0; i < 5; i++)
                        {
                            observableConcurrentQueue.TryPeek(out item);
                            Thread.Sleep(300);
                            observableConcurrentQueue.TryDequeue(out item);
                            Thread.Sleep(300);
                        }

                        observableConcurrentQueue.TryPeek(out item);
                        Thread.Sleep(300);

                        Console.WriteLine("Dequeue all elements...");
                        while (observableConcurrentQueue.TryDequeue(out item))
                        {
                            Thread.Sleep(300);
                        }
                    });
            task.Start();
            Console.WriteLine("End. Press any key to exit...");
            Console.ReadKey(true);
        }
예제 #8
0
        private static void TryItWithoutThreadSafe()
        {
            var observableConcurrentQueue = new ObservableConcurrentQueue <int>();

            observableConcurrentQueue.ContentChanged += OnObservableConcurrentQueueContentChanged;
            var task = new Task(
                () =>
            {
                Console.WriteLine("Enqueue elements...");
                for (int i = 1; i <= 20; i++)
                {
                    observableConcurrentQueue.Enqueue(i);
                    Thread.Sleep(100);
                }

                int item;

                Console.WriteLine("Peek & Dequeue 5 elements...");
                for (int i = 0; i < 5; i++)
                {
                    observableConcurrentQueue.TryPeek(out item);
                    Thread.Sleep(300);
                    observableConcurrentQueue.TryDequeue(out item);
                    Thread.Sleep(300);
                }

                observableConcurrentQueue.TryPeek(out item);
                Thread.Sleep(300);

                Console.WriteLine("Dequeue all elements...");
                while (observableConcurrentQueue.TryDequeue(out item))
                {
                    Thread.Sleep(300);
                }
            });

            task.Start();
        }
        private async void ReceiveC2dAsync(DeviceClient deviceClient)
        {
            while (true)
            {
                try
                {
                    Message receivedMessage = await deviceClient.ReceiveAsync();

                    if (receivedMessage == null)
                    {
                        await Task.Delay(2000);

                        continue;
                    }

                    await deviceClient.CompleteAsync(receivedMessage);

                    string command = Encoding.ASCII.GetString(receivedMessage.GetBytes());

                    q.Enqueue(command);
                }
                catch { telemetry.Exceptions++; }
            }
        }
예제 #10
0
 public void Download(Uri url)
 {
     Interlocked.Increment(ref totalLinks);
     downloadLinks.Enqueue(url);
 }