コード例 #1
0
        public async Task PermiateAll()
        {
            var permutes = new HashSet <uint>();

            using (var queue = new ProducerConsumerQueue <uint>(uint.MaxValue)) {
                var permuteTask = new Task(() => {
                    for (long i = uint.MinValue; i < 10000000; i++)
                    {
                        queue.Put(UrlID.PermuteId((uint)i));
                        if (i % 1000000 == 0)
                        {
                            System.Console.WriteLine("Processed {0}", i);
                        }
                    }
                    queue.FinishedProducing();
                });

                var checkTask = new Task(() => {
                    while (!queue.HasFinishedProducing)
                    {
                        var toCheck = queue.Take();
                        Assert.AreEqual(false, permutes.Contains(toCheck), "Value {0} clashed".FormatWith(toCheck));
                        permutes.Add(toCheck);
                    }
                });

                permuteTask.Start();
                checkTask.Start();
                await Task.WhenAll(permuteTask, checkTask);
            }
        }