离开我的 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>
的方法可以节省您进行演员表的费用。
我有一个RootDialog,它包含3 个路径BTCDialog、LTCDialog 和ETHDialog。 当我通过像 BTCDialog 这样的第一个对话框时,我执行我的代码,并且我需要在我的对话框完成时退出(例如,因为我需要启动 LTCDialog) 我使用
通过 BTCDialogawait 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>
的方法可以节省您进行演员表的费用。