コード例 #1
0
        public void CanRunWithoutIndividualAwait()
        {
            var stopWatch = new Stopwatch();
            var queue     = new MemoryQueue <string>(nameof(CanRunWithoutIndividualAwait));

            queue.SetQueueItemAction(SlowItemAction, true);
            queue.KeepQueueAliveTimeSpan = TimeSpan.Zero;
            stopWatch.Start();
            for (var i = 0; i < 20000; i++)
            {
                queue.AddMessage($"item {i}");
            }

            UT.Assert.IsTrue(queue.OnlyForUnitTest_HasAliveBackgroundWorker);
            while (queue.OnlyForUnitTest_HasAliveBackgroundWorker)
            {
                Console.WriteLine($"LatestItemFetchedAfterActiveTimeSpan: {queue.LatestItemFetchedAfterActiveTimeSpan.TotalMilliseconds} milliseconds.");
                Thread.Sleep(TimeSpan.FromMilliseconds(20));
            }
            stopWatch.Stop();
            Console.WriteLine($"LatestItemFetchedAfterActiveTimeSpan: {queue.LatestItemFetchedAfterActiveTimeSpan.TotalMilliseconds} milliseconds.");
            Console.WriteLine();
            Console.WriteLine($"Total time: {stopWatch.Elapsed.TotalMilliseconds} milliseconds");
            UT.Assert.AreEqual(TimeSpan.Zero, queue.LatestItemFetchedAfterActiveTimeSpan);
            UT.Assert.IsTrue(stopWatch.ElapsedMilliseconds < 2000);
        }