2017-07-04 35 views
1

我有一個LuisDialog至極使得前進到另一個LuisDialog在「無」的意圖是某種回退:堆棧在子對話框調用context.Done時是空的錯誤

[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); 
} 

的方法,MyChildDialog執行是這樣的:

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

當context.Done()被執行時,模擬器顯示一個錯誤:「Stack is empty」。但是,如果向前將對話框添加到堆棧,怎麼會是空的?

回答

1

確保你有當MyChildDialog被fininshed做處理程序

[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; 
    }