示例#1
0
        public async Task can_query_one_value_in_one_batch()
        {
            var values = new [] { new KeyValuePair <long, int>(1, 2), new KeyValuePair <long, int>(1, 3) }.ToLookup(pair => pair.Key, pair => pair.Value);
            int calls = 0;
            var b     = new AsyncFuncManyBatcher <long, int>(keys => { calls++; return(Task.FromResult(values)); }, TimeSpan.FromMilliseconds(10));
            IEnumerable <int> result = await b.QueryAsync(1);

            Assert.IsTrue(Enumerable.SequenceEqual(new[] { 2, 3 }, result));
            Assert.AreEqual(1, calls);
        }
示例#2
0
        public void any_exception_caught_by_the_batch_query_is_returned_to_all_query_tasks()
        {
            var exception = new Exception("whoops");
            var b         = new AsyncFuncManyBatcher <long, int>(keys => { throw exception; }, TimeSpan.FromMilliseconds(50));
            var tasks     = new[] { b.QueryAsync(1), b.QueryAsync(2) };

            foreach (var t in tasks)
            {
                var task = t;
                var ae   = Assert.Throws <AggregateException>(() => task.Wait(100));
                Assert.AreSame(exception, ae.InnerException);
            }
        }
示例#3
0
        public async Task can_query_many_values_in_one_batch()
        {
            var values = new Dictionary <long, int> {
                { 1, 2 }, { 2, 3 }
            }.ToLookup(pair => pair.Key, pair => pair.Value);
            int calls = 0;
            var b     = new AsyncFuncManyBatcher <long, int>(keys => { calls++; return(Task.FromResult(values)); }, TimeSpan.FromMilliseconds(10));
            var tasks = new[] { b.QueryAsync(1), b.QueryAsync(2) };
            await Task.WhenAll(tasks);

            Assert.IsTrue(Enumerable.SequenceEqual(new[] { 2 }, tasks[0].Result));
            Assert.IsTrue(Enumerable.SequenceEqual(new[] { 3 }, tasks[1].Result));
            Assert.AreEqual(1, calls);
        }
示例#4
0
        public async Task can_query_again_after_first_batch_query()
        {
            var values = new[] {
                new Dictionary <long, int> {
                    { 1, 2 }
                }.ToLookup(pair => pair.Key, pair => pair.Value),
                new Dictionary <long, int> {
                    { 2, 3 }
                }.ToLookup(pair => pair.Key, pair => pair.Value),
            };
            int calls = 0;
            var b     = new AsyncFuncManyBatcher <long, int>(keys => Task.FromResult(values[calls++]), TimeSpan.FromMilliseconds(10));

            Assert.IsTrue(Enumerable.SequenceEqual(new[] { 2 }, await b.QueryAsync(1)));
            Assert.IsTrue(Enumerable.SequenceEqual(new[] { 3 }, await b.QueryAsync(2)));
            Assert.AreEqual(2, calls);
        }