离开我的 secondDialog 并继续 RootDialog

Leave my secondDialog and continue with RootDialog

我有一个RootDialog,它包含3 个路径BTCDialog、LTCDialog 和ETHDialog。 当我通过像 BTCDialog 这样的第一个对话框时,我执行我的代码,并且我需要在我的对话框完成时退出(例如,因为我需要启动 LTCDialog) 我使用

通过 BTCDialog
await context.Forward(new BTCDialog(), this.ResumeAfterDialog, activity, CancellationToken.None);

完成后,我会使用 BTCDialog context.Done(参数); 所以我在 RootDialog

中执行了我的函数
private async Task ResumeAfterDialog(IDialogContext context, IAwaitable<object> result)
        {
            var activity = await result as Activity;

            context.Wait(MessageReceivedAsync);
        }

我的问题是当我的方法 ResumeAfterDialog 被执行时,我有一个信息(结果)包含一条我可以在我的 RootDialog 中使用的消息 如何编写我的方法 ResumeAfterDialog 以继续与我的用户对话?我想直接执行方法 MessageReceivedAsync

假设您的结果是 IMessageActivity 类型,那么您可以直接调用 MessageReceivedAsync 方法,而不是等待下一条消息。

private async Task ResumeAfterDialog(IDialogContext context, IAwaitable<object> result)
{
    var activity = await result as Activity;

    await MessageReceivedAsync(context, Awaitable.FromItem(activity));
}

附带说明一下,如果您的 BTCDialog 对话框将始终返回 IMessageActivity,您应该将对话框更新为 IDialog,这样您就可以更新 ResumeAfterDialog接收 IAwaitable<IMessageActivity> 而不是 IAwaitable<object> 的方法可以节省您进行演员表的费用。