我有一个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
方法答案 0 :(得分:0)
假设您的结果属于service_list.setHasFixedSize(true)
类型,那么您只需调用IMessageActivity
方法,而不是等待下一条消息。
MessageReceivedAsync
作为旁注,如果您的private async Task ResumeAfterDialog(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
await MessageReceivedAsync(context, Awaitable.FromItem(activity));
}
对话框始终返回BTCDialog
,则应将对话框更新为IDialog,这样您就可以将IMessageActivity
方法更新为收到ResumeAfterDialog
而不是IAwaitable<IMessageActivity>
可以节省您的演员资格。