如何在对话框

时间:2016-08-18 00:56:01

标签: botframework

我无法理解如何在Dialogs中使用IDialogContext方法Fail。我知道它应该向父对话框发送一个异常,但这会发生在哪里?我认为在ResumeAfter方法中我并不完全确定。

我问这个是因为我有几个从根对话框分支出来的对话框,我正试图找出一种方法将异常一直传播回root并返回到我最初调用的地方{{1}在我的控制器中。这样做的任何例子都很棒。

1 个答案:

答案 0 :(得分:6)

我找到了处理异常的好方法。如果您希望使用异常显式结束上下文,则context.Fail似乎是。如果在对话框的其他位置抛出异常但未被捕获,则会将其传播到父对话框,并可以使用ResumeAfter方法接收。 E.g。

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