コード例 #1
0
        public async Task should_return_actions_limited_by_top_modifier()
        {
            var query = new TrackActionQuery
            {
                ActionQuery = new ActionQuery
                {
                    Top = 2
                }
            };

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

            searchServices.FindActionsAsync(Arg.Any <ActionQuery>()).Returns(Task.FromResult(new[]
            {
                new Action(1, new DateTime(2001, 10, 2)),
                new Action(1, new DateTime(2001, 1, 2)),
                new Action(1, new DateTime(2001, 9, 2))
            }));

            var sut = new TrackActionSearchService(searchServices, Options.Create(new BatchProcessingConfig()));

            var actions = await sut.FindActionsAsync(query);

            actions.ShouldBeEqualTo(new[]
            {
                new Action(1, new DateTime(2001, 10, 2)),
                new Action(1, new DateTime(2001, 9, 2))
            });
        }
コード例 #2
0
        public async Task <Action[]> FindActionsAsync(ActionQuery query)
        {
            var i = _counter++;

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

            try
            {
                return(await _searchServices.FindActionsAsync(query));
            }
            finally
            {
                Console.WriteLine($"[{_sw.Elapsed}] [{i}] FindActionsAsync invoked");
            }
        }
コード例 #3
0
        private async Task <Task> ProduceActionsAsync(TrackActionQuery query, ITargetBlock <Action[]> actionQueue)
        {
            if (query.AccountQuery == null && query.ContactQuery == null)
            {
                bool sendStatus = await actionQueue.SendAsync(await _searchServices.FindActionsAsync(query.ActionQuery));

                if (!sendStatus)
                {
                    throw new InvalidOperationException("Revisit bottleneck");
                }

                return(Task.CompletedTask);
            }

            var produceAccountActionTask = query.AccountQuery != null?ProduceAccountActionsAsync(query, actionQueue) : Task.CompletedTask;

            var produceContactActionTask = query.ContactQuery != null?ProduceContactActionsAsync(query, actionQueue) : Task.CompletedTask;

            return(Task.WhenAll(produceAccountActionTask, produceContactActionTask));
        }