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)) }); }
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"); } }
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)); }