private Task ProduceContactActionsAsync(TrackActionQuery query, ITargetBlock <Action[]> actionQueue)
 {
     return(ProduceParticipantActionsAsync(
                () => _searchServices.FindContactsAsync(query.ContactQuery),
                contacts => _searchServices.FindActionsByContactsAsync(query.ActionQuery, contacts),
                actionQueue,
                _batchOptions.Value.ContactActionsDatabaseSearchMaxDegreeOfParallelism
                ).Unwrap());
 }
示例#2
0
        public async Task <IEnumerable <Task <int[]> > > FindContactsAsync(ContactQuery query)
        {
            var i = _counter++;

            Console.WriteLine($"[{_sw.Elapsed}] [{i}] FindContactsAsync invoking");

            try
            {
                return(await _searchServices.FindContactsAsync(query));
            }
            finally
            {
                Console.WriteLine($"[{_sw.Elapsed}] [{i}] FindContactsAsync invoked");
            }
        }
示例#3
0
        public async Task should_return_actions_by_account_and_contact_queries()
        {
            var query = new TrackActionQuery
            {
                AccountQuery = new AccountQuery(),
                ContactQuery = new ContactQuery()
            };

            ISearchServices searchServices = Substitute.For <ISearchServices>();

            searchServices.FindAccountsAsync(Arg.Any <AccountQuery>()).Returns(Task.FromResult(new[]
            {
                Task.FromResult(Enumerable.Range(0, 13).ToArray())
            }.AsEnumerable()));
            searchServices.FindContactsAsync(Arg.Any <ContactQuery>()).Returns(Task.FromResult(new[]
            {
                Task.FromResult(Enumerable.Range(0, 11).ToArray())
            }.AsEnumerable()));

            searchServices.FindActionsByAccountsAsync(Arg.Any <ActionQuery>(), Arg.Is <int[]>(accounts => accounts.Length == 13)).Returns(Task.FromResult(new[]
            {
                new Action(10, new DateTime(2001, 10, 2)),
                new Action(9, new DateTime(2001, 9, 2))
            }));

            searchServices.FindActionsByContactsAsync(Arg.Any <ActionQuery>(), Arg.Is <int[]>(contacts => contacts.Length == 11)).Returns(Task.FromResult(new[]
            {
                new Action(9, new DateTime(2001, 9, 2)),
                new Action(1, new DateTime(2001, 1, 2))
            }));

            TrackActionSearchService sut = new TrackActionSearchService(searchServices, Options.Create(new BatchProcessingConfig {
                BatchSize = 15
            }));

            var actions = await sut.FindActionsAsync(query);

            actions.ShouldBeEqualTo(new[]
            {
                new Action(10, new DateTime(2001, 10, 2)),
                new Action(9, new DateTime(2001, 9, 2)),
                new Action(1, new DateTime(2001, 1, 2))
            });
        }