我发现了一个处理异常的好方法。看来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}");
}
}