"堆栈是空的"在Microsoft Bot Framework中

时间:2017-03-09 11:35:33

标签: botframework

我正在使用Microsoft Bot Framework编写机器人。它由使用MessagesController调用LuisDialog的{​​{1}}组成。

某些情况会触发此消息的异常:

  

堆栈为空

我在Bot Framework的源代码中找到了触发它的位置:

await Conversation.SendAsync...

然而,我无法弄清楚它是如何被触发的。在逐行调试时,代码似乎工作正常(有很多代码,并且它经历了所有代码)。

当让它在没有断点的情况下运行时,它会因此异常而崩溃。

我的 134 public static T Peek<T>(this IList<T> stack) 135 { 136 if (stack.Count == 0) 137 { 138 throw new InvalidOperationException("Stack is empty"); 139 } 140 141 return stack[stack.Count - 1]; 142 } 被包装到try / catch中,这就是我捕获异常的方法。

我无法弄清楚代码的哪一部分确切地导致异常。

你知道什么可能导致&#34;堆栈空了&#34;信息?

稍后更新:

一段时间后,我开始在另一段代码中获得await Conversation.SendAsync个例外,我确保所有内容都是Stack is Emptyasync ed:

await

事实证明,在这种特殊情况下,这是因为我使用public async Task StartAsync(IDialogContext context) { context.Wait(UserProfileStep1); } public async Task UserProfileStep1(IDialogContext context, IAwaitable<object> original) { string originalMessage = (string)await original; // <== the exception occurs here 并尝试将context.Forward对象传递给它,而它只支持string个对象。

2 个答案:

答案 0 :(得分:2)

对我来说,你似乎错过了某个地方的等候运营商。我之前遇到过这个异常(即使有同样的问题),在调用外部API时还没有等待它完成,所以当我调试时我给了时间,但是实时的机器人比API更快。我需要查看您的代码以提供更多信息

答案 1 :(得分:0)

  

context.Done<object>(null);

在StartAsync的最后一个中使用它。