public async Task <MatchingResponse> Simulate(MatchingRequest request, bool addTestData) { string[] sentences = await _languageService.GetRandomSentences(request.Language, request.SentenceCount); string[] words = await _languageService.GetRandomWords(request.Language, request.WordCount); var response = new MatchingResponse() { Summaries = new MatchingSummary[request.Matcher.Length] }; if (addTestData) { response.Sentences = sentences; response.Words = words; } var sentencesEq = sentences.Select((sentence) => IMatcher <char> .ConvertFromString(sentence)).ToArray(); var wordsEq = words.Select((word) => IMatcher <char> .ConvertFromString(word)).ToArray(); //SPAWN IN NEW THREAD AND THEN AWAIT FINISH for (int mI = 0; mI < response.Summaries.Length; mI++) { response.Summaries[mI] = new MatchingSummary() { Matcher = request.Matcher[mI] }; GetMatcherResponse(sentencesEq, wordsEq, response.Summaries[mI]); } return(response); }