В моем сценарии ExampleStreaming.cs
, когда пользовательское высказывание распознается как final
, я отправляю его как службе Watson Assistant
, так и Tone Analyzer
.Поскольку я храню сценарии для каждой службы отдельно, я должен выполнять вызовы внутри каждого сценария для доступа к другой службе.Вы можете видеть вызов, который я делаю для Tone Analyzer
ниже (метод .SendToneAnalysis
):
private void OnRecognize(SpeechRecognitionEvent result, Dictionary<string, object> customData)
{
blah blah blah . . .
/// Only send the recognized speech utterance to the
/// Assistant once we know the user has stopped talking.
if (res.final)
{
string _conversationString = alt.transcript;
Runnable.Run( StopRecording(1f) ); // Stop the microphone from listening.
/// Message.
Dictionary<string, object> input = new Dictionary<string, object>
{
["text"] = _conversationString
};
MessageRequest messageRequest = new MessageRequest()
{
Input = input,
Context = _Context
};
_exampleAssistantV1_script.SendMessageAssistant(messageRequest);
_exampleToneAnalyzer.SendToneAnalysis(_conversationString);
. . .
В моем скрипте ExampleToneAnalyzer.cs
я делаю простой вызов методов обработки событий, которыепредназначены для связи со службой, а также для обработки успеха и неудач:
public void SendToneAnalysis(string conversationString)
{
_service.GetToneAnalyze(OnGetToneAnalyze, OnFail, conversationString);
}
Эти вызовы обычно выполняются с использованием StartCoroutines
, особенно в Watson Unity SDK, что существует специализированный Runnable.Run
, который по сути является помощникомкласс для запуска сопрограмм без необходимости наследования от MonoBehavior
.
Мой вопрос заключается в том, может ли мой простой вызов метода для службы быть проблематичным в определенных ситуациях или, возможно, просто неправильным или плохим программированием, или же этосовершенно нормально использовать этот метод вместо чего-то вроде следующего:
public void SendToneAnalysis(string conversationString)
{
Runnable.Run( SendAssistantToneAnalysis(conversationString) );
}
private IEnumerator SendAssistantToneAnalysis(string conversationString)
{
if ( !_service.GetToneAnalyze(OnGetToneAnalyze, OnFail, conversationString) )
{
Log.Debug("ExampleToneAnalyzer.SendAssistantToneAnalysis()", "Failed to analyze!");
}
while (!_UserUtteranceToneTested)
yield return null;
}