Exemplo n.º 1
0
        public async Task EnqueueAndDequeueQueueDfs()
        {
            var ownerId   = Guid.NewGuid().ToString("N");
            var scheduler = new QueueDistinctDfsScheduler(new HashSetDuplicateRemover(), _hashAlgorithm);
            await scheduler.EnqueueAsync(new[] { new Request("http://www.a.com")
                                                 {
                                                     Owner = ownerId
                                                 } });

            await scheduler.EnqueueAsync(new[] { new Request("http://www.a.com")
                                                 {
                                                     Owner = ownerId
                                                 } });

            await scheduler.EnqueueAsync(new[] { new Request("http://www.a.com")
                                                 {
                                                     Owner = ownerId
                                                 } });

            await scheduler.EnqueueAsync(new[] { new Request("http://www.b.com")
                                                 {
                                                     Owner = ownerId
                                                 } });

            var request = (await scheduler.DequeueAsync()).First();

            Assert.Equal("http://www.b.com/", request.RequestUri.ToString());
            Assert.Equal(2, scheduler.Total);
        }
Exemplo n.º 2
0
        public void ParallelEnqueueAndDequeueQueueDfs()
        {
            var scheduler = new QueueDistinctDfsScheduler();
            var ownerId   = Guid.NewGuid().ToString("N");

            Parallel.For(0, 1000, new ParallelOptions {
                MaxDegreeOfParallelism = 20
            }, i =>
            {
                scheduler.Enqueue(new[]
                {
                    new Request("http://www.a.com")
                    {
                        OwnerId = ownerId
                    }
                });
                scheduler.Enqueue(new[]
                {
                    new Request("http://www.a.com")
                    {
                        OwnerId = ownerId
                    }
                });
                scheduler.Enqueue(new[]
                {
                    new Request("http://www.a.com")
                    {
                        OwnerId = ownerId
                    }
                });
                scheduler.Enqueue(new[]
                {
                    new Request("http://www.b.com")
                    {
                        OwnerId = ownerId
                    }
                });
                scheduler.Enqueue(new[]
                {
                    new Request($"http://www.{i.ToString()}.com", null)
                    {
                        OwnerId = ownerId
                    }
                });
            });
            Parallel.For(0, 1000, new ParallelOptions {
                MaxDegreeOfParallelism = 20
            },
                         i => { scheduler.Dequeue(ownerId); });

            Assert.Equal(2, scheduler.Requests[ownerId].Count);
            Assert.Equal(1002, scheduler.Total);
        }
Exemplo n.º 3
0
        public Task ParallelEnqueueAndDequeueQueueDfs()
        {
            var scheduler = new QueueDistinctDfsScheduler(new HashSetDuplicateRemover());
            var ownerId   = Guid.NewGuid().ToString("N");

            Parallel.For(0, 1000, new ParallelOptions {
                MaxDegreeOfParallelism = 10
            }, async i =>
            {
                await scheduler.EnqueueAsync(new[]
                {
                    new Request("http://www.a.com")
                    {
                        Owner = ownerId
                    }
                });
                await scheduler.EnqueueAsync(new[]
                {
                    new Request("http://www.a.com")
                    {
                        Owner = ownerId
                    }
                });
                await scheduler.EnqueueAsync(new[]
                {
                    new Request("http://www.a.com")
                    {
                        Owner = ownerId
                    }
                });
                await scheduler.EnqueueAsync(new[]
                {
                    new Request("http://www.b.com")
                    {
                        Owner = ownerId
                    }
                });
                await scheduler.EnqueueAsync(new[]
                {
                    new Request($"http://www.{i.ToString()}.com", null)
                    {
                        Owner = ownerId
                    }
                });
            });
            Parallel.For(0, 1000, new ParallelOptions {
                MaxDegreeOfParallelism = 20
            },
                         async i => { await scheduler.DequeueAsync(); });

            Assert.Equal(1002, scheduler.Total);
            return(Task.CompletedTask);
        }
Exemplo n.º 4
0
        public void EnqueueAndDequeueQueueDfs()
        {
            var ownerId   = Guid.NewGuid().ToString("N");
            var scheduler = new QueueDistinctDfsScheduler();

            scheduler.Enqueue(new[]
            {
                new Request("http://www.a.com")
                {
                    OwnerId = ownerId
                }
            });
            scheduler.Enqueue(new[]
            {
                new Request("http://www.a.com")
                {
                    OwnerId = ownerId
                }
            });
            scheduler.Enqueue(new[]
            {
                new Request("http://www.a.com")
                {
                    OwnerId = ownerId
                }
            });
            scheduler.Enqueue(new[]
            {
                new Request("http://www.b.com")
                {
                    OwnerId = ownerId
                }
            });

            var request = scheduler.Dequeue(ownerId)[0];

            Assert.Equal("http://www.b.com", request.Url);
            Assert.Single(scheduler.Requests[ownerId]);
            Assert.Equal(2, scheduler.Total);
        }