2016-08-18 66 views
1

我无法理解如何在对话框中使用IDialogContext方法Fail。我知道它应该向父对话发送一个异常,但是这会发生在什么地方?我认为在ResumeAfter方法,但我不完全确定。如何在对话框中使用context.Fail()

我在问这个,因为我有几个对话框从根对话框分支出来,我试图找出一种方法来将异常传播回根,然后返回到我最初称为Conversations.SendAsync的地方控制器。任何这样做的例子都会很棒。

回答

4

我发现了一个处理异常的好方法。看来context.Fail是如果你想明确结束上下文的例外。如果在对话框的其他地方引发异常并且未捕获到异常,它将传播到父对话框,并可以通过方法ResumeAfter接收。例如。

public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument) 
{ 
    var message = await argument; 
    await context.Call(new ChildDialog(), AfterMessageAsync); 
} 

private async Task AfterMessageAsync(IDialogContext context, IAwaitable<object> result) 
{ 
    try 
    { 
     var childResult = await result; 
     await context.PostAsync($"ended child with: {childResult}"); 
    } 
    catch (Exception ex) 
    { 
     await context.PostAsync($"ended child with exception: {ex.StackTrace}"); 
    } 
}