2017-07-24 68 views
0

我按照发布的指令here为我的机器人创建一个全局处理程序。在反应到某些关键字(“帮助”),我想通过转发到一个对话框:什么是IDialogTask的Void()和PollAsync()方法?

var replyDialog = new CommonResponsesDialog($"Sometimes I also feel **{state}**..."); 
var interruption = replyDialog.Void<object, IMessageActivity>(); 
_task.Call(interruption, null); 
await _task.PollAsync(token); 

两件事情都不清楚:

  • 什么replyDialog.Void<object, IMessageActivity>();在做什么?即使阅读了docs我也不明白。为什么我不能直接推replyDialog
  • 什么是await _task.PollAsync(token);
+0

不应该'IAwaitable '而不是'IAwaitable ''? – DavidG

+0

没关系,但问题是/是别的。我必须改变我的问题... – Krumelur

+0

你读过[this](https://docs.microsoft.com/en-gb/dotnet/api/microsoft.bot.builder.dialogs.chain.void?view=botbuilder -3.8#Microsoft_Bot_Builder_Dialogs_Chain_Void__2_Microsoft_Bot_Builder_Dialogs_IDialog ___ 0__):*此方法的目的是将先行对话框A用新对话框D包装到现有堆栈顶部对话框L的顶部。* – DavidG

回答

0

Void的调用是一个额外的对话框,将负责从用户重启等待消息,一旦孩子对话框(您replyDialog)已完成的包裹replyDialog

.Call将中断对话框放在堆栈上并且.PollAsync开始运行中断对话框。

如果您查看VoidDialog<T,R>类(here),你会发现:一旦它开始

  1. ,它所说的“前因”对话框
  2. 一旦先行对话已结束,忽略结果并等待新的用户消息
  3. 收到新消息后,它将结束VoidDialog将消息传递给原始对话。
相关问题