コード例 #1
0
        public async Task TestPipeWriteFirst()
        {
            var q            = new OConcurrentQueue <int>((string mess) => { Console.WriteLine("!:" + mess); });
            var cTokenSource = new CancellationTokenSource();

            var workTask1 = Task.Run(async() =>
            {
                for (var i = 0; i < 10; i++, i++)
                {
                    Console.WriteLine("put in pipe: " + i);
                    q.Enqueue(i);
                    Console.WriteLine(".");
                    await Task.Delay(0);
                }
            });

            await Task.Delay(10);

            var readTask = runReadTask(q, cTokenSource);

            var killTask = runKillTask(50, cTokenSource);

            //Task.WaitAll(readTask);
            await Task.WhenAll(readTask);
        }
コード例 #2
0
        // сколько интов мы прочитаем из очереди за 1 милисекунду (20 чтений за 10 милисекунд с выводом на консоль! без консоли астрономические цифры 19472, 17474 за 1 мс!)
        // 1 ms (после цикла 509918, 388412)
        // без консоли за 10 мс 21395, 17157, 23808, 24696 (после цикла 440525, 1009119, 965629)
        // 100 мс 58818, 242128, 243178
        // результаты довольно странные видимо силно зависит от прогретости проца и видимо очередь успевает расти быстрее чем с нее считывают
        // в общем за 1 мс может пройти дофига и слип даже на 1 мс делать нельзя
        public async Task TestPipeReadSpeed()
        {
            var q            = new OConcurrentQueue <int>();
            var cTokenSource = new CancellationTokenSource();

            var readTask = runReadTask(q, cTokenSource);

            // время на запуск первой задачи (она медленная)
            //await Task.Delay(50);
            for (var i = 0; i < 1000000; i++)
            {
                var j = i * 2;
            }

            var workTask1 = Task.Run(async() =>
            {
                for (var i = 0; i < 300000000; i++)
                {
                    //Console.WriteLine("put in pipe: " + i);
                    q.Enqueue(i);
                    //Console.WriteLine(".");
                    await Task.Delay(0);
                }
            });

            var killTask = runKillTask(10, cTokenSource);

            //Task.WaitAll(readTask);
            await readTask;
        }