Microsoft Bot Framework - InvalidNeedException,预期调用,等待

Microsoft Bot Framework - InvalidNeedException, expected Call, have Wait

我的机器人项目中出现 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: 

以下方法都属于同一个Dialogclass

    [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,只需确保该方法异步完成即可。

不确定您要实现的目标,但通过查看代码,我认为:

  • 您不需要在 ProcessX/Y 方法中执行 Context.Wait。 context.Wait是等待消息出现,执行传递过来的continuation delegate。
  • Context.Done用于'complete'/'quit'当前对话框,return一个结果给调用对话框,从对话框栈中弹出当前对话框。但根据您的代码,您似乎想继续在 LUIS 对话框中侦听消息,因此我也将删除这些消息。