Пример #1
0
        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();
        }
Пример #2
0
        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();
        }