我无法理解如何在Dialogs中使用IDialogContext
方法Fail
。我知道它应该向父对话框发送一个异常,但这会发生在哪里?我认为在ResumeAfter
方法中我并不完全确定。
我问这个是因为我有几个从根对话框分支出来的对话框,我正试图找出一种方法将异常一直传播回root并返回到我最初调用的地方{{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}");
}
}