/// <inheritdoc /> public async Task HandleSearchRequests(Func <Request, ISearchResult> searchCoreFunc) { userInterface.ShowMessage($"{Environment.NewLine}Enter search expression:"); var searchRequest = await userInterface.ConsumeInputAsync(); var stopwatch = Stopwatch.StartNew(); var resultText = searchCoreFunc(searchRequest) switch { ISearchResult.Success success => await StringRepresentation(success.Items, stopwatch.Elapsed), ISearchResult.Failure failure => failure.ErrorText, _ => throw new ArgumentOutOfRangeException(nameof(ISearchResult)) }; userInterface.ShowMessage(resultText); userInterface.ShowMessage($"{Environment.NewLine}exit? [yes/no]"); var input = await userInterface.ConsumeInputAsync(); if (!string.Equals(input, "yes", StringComparison.InvariantCultureIgnoreCase)) { await HandleSearchRequests(searchCoreFunc); } }