2017-07-04 1 views
1
Aufruf

Ich habe ein LuisDialog wich ein uns auf eine weitere LuisDialog in der „None“ Absicht als eine Art Rückfall macht:Stack ist leer Fehler beim context.Done in Kind Dialog

[LuisIntent("None")] 
public async Task None(IDialogContext context, IAwaitable<IMessageActivity> message, LuisResult result) 
{ 
    var luisService = new LuisService(new LuisModelAttribute("XXX", "XXX")); 
    await context.Forward(new MyChildDialog(luisService), null, await message); 

    context.Wait(MessageReceived); 
} 

Das Verfahren in MyChildDialog ausgeführt ist wie folgt:

[LuisIntent("myLuisIntent")] 
public async Task MyLuisIntent(IDialogContext context, LuisResult result) 
{ 
    await context.PostAsync("Hi!"); 
    context.Done(0); 
} 

Wenn die context.Done() ausgeführt wird, Emulator zeigt eine Fehlermeldung: "Stack leer ist". Aber wie kann es leer sein, wenn Vorwärts den Dialog zum Stack hinzufügt?

Antwort

1

Vergewissern Sie sich, einen Handler für das, was zu tun ist, wenn die MyChildDialog fininshed ist

[LuisIntent("None")] 
    public async Task None(IDialogContext context, IAwaitable<IMessageActivity> message, LuisResult result) 
    { 
     var luisService = new LuisService(new LuisModelAttribute("XXX", "XXX")); 
     await context.Forward(new MyChildDialog(luisService), WaitForMessageResume, await message); 

     context.Wait(MessageReceived); 
    } 

    private Task WaitForMessageResume(IDialogContext context, IAwaitable<object> result) 
    { 
     context.Wait(MessageReceived); 
     return Task.CompletedTask; 
    } 
Verwandte Themen