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); }
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); }
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); }
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); }