У меня есть сервис, который реализует функциональность для возврата данных из API анализа настроений.Клиент может запросить результаты от одного или всех механизмов, и я хочу сопоставить все данные вместе.Я хочу обработать эти асинхронные и дождаться их завершения, прежде чем возвращать набор результатов.Я новичок в асинхронном программировании, и я действительно не могу понять, как организовать код и как реализовать его синтаксически.Вот пример того, чего я пытаюсь достичь (я знаю, что это не работает, но вы поняли; надеюсь :-)):
private ISentimentResponse ProcessRequest(ISentimentRequest request, SentimentEngineServices selectedEngines)
{
SentimentResponse response = new SentimentResponse();
List<Task> taskList = new List<Task>();
foreach (SentimentEngineServices engineService in (SentimentEngineServices[])Enum.GetValues(typeof(SentimentEngineServices)))
{
if (((int)engineService & (int)selectedEngines) > 0)
{
ISentimentEngine engine = _engineFactory.GetSentimentEngine(engineService, null);
Task<ISentimentEngineResult> task = new Task<ISentimentEngineResult>(engine.AnalyseSentimentASync(request));
taskList.Add(task);
}
}
if (taskList.Count > 0)
{
ISentimentEngineResult[] results = Task<ISentimentEngineResult>.WaitAll(taskList);
foreach (result in results)
response.Add(results);
}
return response;
}
Движок имеет следующую реализацию кода движка.AnalyseSentimentASync:
public ISentimentEngineResult AnalyseSentiment(ISentimentRequest request)
{
try
{
MultiLanguageBatchInput sentimentList = SentimentRequestToMicrosoftBatchInput(request, Properties.Settings.Default.DefaultLanguage);
SentimentBatchResult sentiment = _client.Sentiment(sentimentList);
KeyPhraseBatchResult keyPhrases = _client.KeyPhrases(sentimentList);
return MicrosoftBatchResultsToSentimentEngineResult(sentiment, keyPhrases);
}
catch (Exception ex)
{
_logger.LogMessage(ex,$"{EngineName} threw an unknown exception: ", LoggingLevel.Error);
throw;
}
}
public async Task<ISentimentEngineResult> AnalyseSentimentAsync(ISentimentRequest request)
{
return AnalyseSentiment(request);
}
Что мне нужно сделать и есть ли лучший способ добиться этого?
Я искал пример везде, но не могу найти тот, который касается моеготребования реализации, или весь подход совершенно не так!
Спасибо всем,
Stu.