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); }
// сколько интов мы прочитаем из очереди за 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; }