public async Task EnqueueAndDequeueQueueBfs() { var ownerId = Guid.NewGuid().ToString("N"); var scheduler = new MySqlQueueBfsScheduler(_hashAlgorithm, new Opt()); await scheduler.InitializeAsync(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.a.com") { Owner = ownerId } }); await scheduler.EnqueueAsync(new[] { new Request("http://www.a.com") { Owner = ownerId } }); var request = (await scheduler.DequeueAsync()).First(); Assert.Equal("http://www.a.com/", request.RequestUri.ToString()); Assert.Equal(2, scheduler.GetTotalAsync().Result); await scheduler.CleanAsync(); }
public async Task ParallelEnqueueAndDequeueQueueBfs() { var ownerId = Guid.NewGuid().ToString("N"); var scheduler = new MySqlQueueBfsScheduler(_hashAlgorithm, new Opt()); await scheduler.InitializeAsync(ownerId); ParallelUtilities.For(0, 1000, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 20 }, 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 } }); var cnt = await scheduler.EnqueueAsync( new[] { new Request($"http://www.{i.ToString()}.com") { Owner = ownerId } }); _testOutputHelper.WriteLine($"Enqueue {i}: {cnt}"); }); _testOutputHelper.WriteLine($"End"); ParallelUtilities.For(0, 1000, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 20 }, async _ => { await scheduler.DequeueAsync(); }); Assert.Equal(1002, scheduler.GetTotalAsync().Result); await scheduler.CleanAsync(); }