Botframework 上下文。迭代时出现等待问题

Botframework 上下文。迭代时出现等待问题,botframework,Botframework,我正在使用bot框架c#。RootDialoge上的start async方法正在转发对新类的调用,稍后我想基于JSON文件重复调用这个类。该类在第一次迭代中没有在context.Wait()处等待输入,但在下一次迭代中工作正常 你能告诉我这些线程是如何在内部工作的,为什么它不能在第一次运行时等待输入 RootDialog public async Task StartAsync(IDialogContext context) { callJSON(context); return; } pr

我正在使用bot框架c#。RootDialoge上的start async方法正在转发对新类的调用,稍后我想基于JSON文件重复调用这个类。该类在第一次迭代中没有在context.Wait()处等待输入,但在下一次迭代中工作正常

你能告诉我这些线程是如何在内部工作的,为什么它不能在第一次运行时等待输入

RootDialog
public async Task StartAsync(IDialogContext context)
{
callJSON(context);
return;
}

private async Task callJSON(IDialogContext context)
{
//It will call LUIS API & get topScoringIntent
context.Call(new InstallSoftwareDyanamicFlow(topScoringIntent), this.ResumeAfterInstallSoftware);
} 

InstallSoftwareDyanamicFlowDialog:
public async Task StartAsync(IDialogContext context)
{
await callDynamicFlow(context);
return;
}

public async Task callDynamicFlow(IDialogContext context)
{
// It will get details from configuration file and pass-on one by one value using counter
context.Call(new CommonDialog(inputToIterate[counter].userInput, inputToIterate[counter].objectTypeRef, inputToIterate[counter].valuesToList, inputToIterate[counter].customMessage), this.ResumeAfterInstallSoftware1);
} 

CommonDialog Class:

public async Task StartAsync(IDialogContext context)
{
await context.PostAsync(customMessage);
**context.Wait(ResumeAfterStartAsync);**
}

public virtual async Task<IDialogContext> ResumeAfterStartAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
var receivedResult = await result;
var output = (JObject.Parse(((JValue)((JToken)JsonConvert.SerializeObject((await result)))).ToString()))["value"][userInput1];
var value = await result;
await context.PostAsync(value.ToString());
return context;
}
RootDialog
公共异步任务StartAsync(IDialogContext上下文)
{
callJSON(上下文);
返回;
}
专用异步任务调用JSON(IDialogContext上下文)
{
//它将调用LUIS API并获取topScoringIntent
context.Call(新的InstallSoftwareDyanamicFlow(TopsCoringContent),this.ResumeAfterInstallSoftware);
} 
InstallSoftwareDyanamicFlowDialog:
公共异步任务StartAsync(IDialogContext上下文)
{
wait callDynamicFlow(上下文);
返回;
}
公共异步任务调用DynamicFlow(IDialogContext上下文)
{
//它将从配置文件中获取详细信息,并使用计数器逐个传递值
context.Call(新建CommonDialog(InputOIterate[counter].userInput,InputOIterate[counter].objectTypeRef,InputOIterate[counter].valuesToList,InputOIterate[counter].customMessage),this.ResumeAfterInstallSoftware1;
} 
CommonDialog类:
公共异步任务StartAsync(IDialogContext上下文)
{
等待上下文。PostAsync(customMessage);
**Wait(ResumeAfterStartAsync)**
}
公共虚拟异步任务ResumeAfterStartAsync(IDialogContext上下文,IAwaitable结果)
{
var receivedResult=等待结果;
var输出=(JObject.Parse(((JValue)((JToken)JsonConvert.SerializeObject((等待结果))).ToString())[“值”][userInput1];
var值=等待结果;
wait context.PostAsync(value.ToString());
返回上下文;
}

在这个ResumeAfterStartAsync中,它直接出现,而不需要等待用户只为第一次迭代输入值,即计数器=1,但计数器=2等等都可以正常工作。

似乎您为InstallSoftwareDyanamicFlowDialog&CommonDialog类和expect参数定义了构造函数,您没有共享实现的完整代码,这不足以重现问题,请共享您的完整代码。这是一个企业代码,我无法完全共享。所以我分享其中的重要部分。在InstallSoftwareDyanamicFlowDialog中,我正在传递intent,然后intent从配置文件中获取必要的参数列表。稍后,我们将使用递增计数器变量为所有参数调用CommonDialog。