【问题标题】:Microsoft Bot Framework - InvalidNeedException, expected Call, have WaitMicrosoft Bot Framework - InvalidNeedException,预期调用,等待
【发布时间】:2016-08-31 08:45:55
【问题描述】:

我在我的机器人项目中遇到了 InvalidNeedException,但我无法理解该异常的确切含义。

Microsoft.Bot.Builder.Internals.Fibers.InvalidNeedException occurred
  HResult=-2146233079
  Message=invalid need: expected Call, have Wait
  Source=Microsoft.Bot.Builder
  StackTrace:
       at Microsoft.Bot.Builder.Internals.Fibers.Frame`1.Microsoft.Bot.Builder.Internals.Fibers.IWaiter<C>.NextWait[T]()
  InnerException: 

以下方法都属于同一个Dialog类

    [LuisIntent("Test")]
    public async Task GetReleaseTickets(IDialogContext context, LuisResult result)
    {            
       await ProcessEntities(context, result.Entities);
       await context.PostAsync("done");
       context.Wait(MessageReceived);
    }

    private async Task ProcessEntities(IDialogContext context, IList<EntityRecommendation> entities) {
        context.Wait<bool>(ProcessX);
        context.Wait<bool>(ProcessY); // exception thrown here
    }

在哪里

    public async Task ProcessX(IDialogContext context, IAwaitable<bool> argument) {
      //do X
      context.Done();
}

    public async Task ProcessY(IDialogContext context, IAwaitable<bool> argument) {
      //do Y
      context.Done();
}

看来我不能调用 context.Wait 连续两次,但我不确定调用两个异步方法的推荐方法是什么,并且想了解“预期调用有什么”等等”要我做。我不想在该行调用 context.Call,只要确保该方法异步完成即可。

【问题讨论】:

    标签: c# asynchronous botframework


    【解决方案1】:

    不确定您要实现什么,但通过查看代码我认为:

    • 您不需要在 ProcessX/Y 方法中执行 Context.Wait。 context.Wait 是等待消息出现并执行传递的延续委托。
    • Context.Done 用于“完成”/“退出”当前对话框并将结果返回给调用对话框,并从对话框堆栈中弹出当前对话框。但根据您的代码,您似乎希望继续侦听 LUIS 对话框中的消息,因此我也会删除这些消息。

    【讨论】:

    • 凯尔西,这有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2023-03-11
    • 2018-03-11
    • 1970-01-01
    • 2023-04-08
    • 2021-08-20
    • 1970-01-01
    相关资源
    最近更新 更多