如何在对话框中使用context.Fail()

jac*_*rms 1 botframework

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

我问这个是因为我有一个从根对话框分支的几个对话框,我正在试图找出一种方法将异常一直传播回root并返回到我最初Conversations.SendAsync在Controller中调用的位置.这样做的任何例子都会很棒.

jac*_*rms 6

我找到了处理异常的好方法.看来,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}");
    }
}
Run Code Online (Sandbox Code Playgroud)