как вызвать как обычный диалог, так и LuisDialog из MessageController

У меня есть требование, когда на основе некоторого условия мне нужно вызвать либо обычный диалог, либо LuisDialog, я не могу добиться того же.

if(condition == 1)
  return await Conversation.SendAsync(message, () => new SampleLuisDialog());
else
  return await Conversation.SendAsync(message, () => new SimpleIDialog());

Проблема в следующем:
Когда он удовлетворяет второму условию, он выполняет логику внутри SimpleIDialog. Когда он удовлетворяет 1-му условию, вместо того, чтобы попасть в SampleLuisDialog, он снова попадает в startAsync из SimpleIDialog. Что я здесь делаю неправильно?


person suchismita    schedule 28.06.2016    source источник
comment
Здесь только одно условие. Воспользуйтесь отладчиком и посмотрите, какое значение имеет переменная condition.   -  person BartoszKP    schedule 28.06.2016
comment
только одно условие, когда я сказал второе условие, я имел в виду другую его часть   -  person suchismita    schedule 28.06.2016
comment
Хорошо, тогда применима и другая часть моего комментария. Как вы проверяете, что при выполнении условия условие else все равно выполняется? Попробуйте отладчик!   -  person BartoszKP    schedule 28.06.2016
comment
да, он переходит в блок else, но не затрагивает ни одно из намерений LUIS (т. е. любой метод в диалоговом окне LUIS)   -  person suchismita    schedule 28.06.2016
comment
Ну, это асинхронный метод, поэтому он не обязательно выполнит его сразу. Вы пытались поставить точки останова внутри конструктора SampleLuisDialog?   -  person BartoszKP    schedule 28.06.2016
comment
@suchismita ты нашел решение этой проблемы? У меня точно такая же ситуация в моем коде. context.Done, похоже, не решает проблему   -  person Dennis van den Berg    schedule 01.08.2016
comment
Нет, я не нашел никакого решения. Я пошел дальше, оставив только LuisDialig и переместив условия в качестве свойств данных диалога.   -  person suchismita    schedule 05.08.2016


Ответы (1)


Внутри вашего первого вызванного диалога вам в какой-то момент придется вызвать Context.Done. До этого Пользователь "застревает" в этом Диалоге.

Поэтому, прежде чем вы начнете другой диалог, вам нужно будет «закрыть» первый диалог.

person Eiren    schedule 28.06.2016
comment
соглашаться . это хорошо работает, если у нас есть корневой диалог, и из него мы пытаемся вызвать несколько других дочерних диалогов. Но в моем случае я пытаюсь вызвать несколько диалогов из MessageController.cs. - person suchismita; 05.07.2016