我正在构建一个机器人,为用户提供一个选项列表,理想情况下,用户会从列表中选择一些内容。场景将是寻找餐饮选项的用户。我向用户提供当地餐馆的列表,之后用户可以询问有关餐馆的问题。当用户要求我列出的选项时,PromptChoice非常适合。但是,如果用户要求列表中的内容,而不是提示用户重试他们的查询,我想采取用户的查询,然后执行查找,看看我是否有答案题。如何修改PromptChoice重试行为?我已经在我的消息处理程序中尝试过这个:
private async Task MessageHandler(IDialogContext context, IAwaitable<object> argument){
string message = "";
try{
object obj = await argument;
//parse message, do something
if(obj.GetType() == typeof(string)){
message = obj.ToString();
}
}
catch(TooManyAttemptsException){
//do something else
object obj = await argument;
if(obj.GetType() == typeof(string)){
DoSomethingElse(obj.ToString());
}
}
//parse the message
}
然而,这不起作用,在我可以做一些更优雅的事情之前,僵尸程序最终会在崩溃之前通过我的重试提示回复给用户。当我在循环的catch部分放入断点时,虽然我的断点被击中,但是当我启动DoSomethingElse函数时,僵尸程序已经响应了用户。我用我自己的PromptChoice覆盖了PromptDialog.PromptChoice类,但即使在这个类中,我也不确定要改变什么,以便我不会发出重试提示,而是在其他地方处理消息。有什么想法吗?