Botframework 如何在bot框架中取消对话框?

Botframework 如何在bot框架中取消对话框?,botframework,Botframework,在等待速度特别慢的api时,我试图让我的机器人的用户保持忙碌。我将用户转发到一个新对话框,并提供一个取消令牌,以便在api返回结果后取消该对话框 我希望下面的代码在调用取消令牌上的Cancel()时退出StallUntillCompleted对话框 public async Task ResumeAfterFirstDialog(IDialogContext context, IAwaitable<API.M

在等待速度特别慢的api时,我试图让我的机器人的用户保持忙碌。我将用户转发到一个新对话框,并提供一个取消令牌,以便在api返回结果后取消该对话框

我希望下面的代码在调用取消令牌上的Cancel()时退出StallUntillCompleted对话框

public async Task ResumeAfterFirstDialog(IDialogContext context,
                                         IAwaitable<API.Models.Request> result)
{
    var requestData = await result;
    var response = new API.Models.Response();
    var cancellationToken = new CancellationTokenSource();

    Task.Run(async () =>
    {
        response = await _slowApi.CallApi(requestData, accessToken);

        cancellationToken.Cancel();
    });

    var stallUntilCompletedDialog = new StallUntilCompletedDialog<ApiResponse>();
    await context.Forward(stallUntilCompletedDialog, 
                          ResumeAfterCompletedDialog, 
                          result, 
                          cancellationToken.Token);
}
公共异步任务ResumeAfterFirstDialog(IDialogContext上下文,
(可等待的结果)
{
var requestData=等待结果;
var response=新的API.Models.response();
var cancellationToken=新的CancellationTokenSource();
Task.Run(异步()=>
{
response=wait_slowApi.CallApi(requestData,accessToken);
cancellationToken.Cancel();
});
var stallUntilCompletedDialog=新的stallUntilCompletedDialog();
等待上下文转发(暂停完成对话框,
ResumeAfterCompletedDialog,
结果,,
取消令牌。令牌);
}
ResumeAfterCompletedDialog从未启动,我被困在暂停对话框中。
我如何才能在api响应时完成对话框退出,以及如何在我的ResumeAfterCompleted对话框中使用api响应?

ResumeAfterCompleted对话框从未启动,我被困在暂停对话框中
它是否引发任何异常?没有任何异常。我做了更多的调查,我认为正在发生的事情如下。Task.Run创建我的rootDialog的新实例,因此我在Task.Run块中所做的一切都不会影响第一个实例,即属于主线程的实例。你知道我应该如何运行一个等待api响应的任务,同时用更多的对话框来娱乐用户吗?不要调用
cancellationToken.Cancel()
尝试调用
Context.Done(true)
根据您是否从对话框返回内容,真实值可能会有所不同。问题是StallUntillCompletedDialog不知道慢速api何时返回了值。所以我不知道什么时候在新对话框中调用context.Done()。或者你是说我可以在Task.Run中调用context.Done(),它将停止暂停对话框?是的,这将是一个问题。除非手动从堆栈中删除暂停对话框,否则无法以这种方式执行此操作。您可能需要重新考虑此设计。这可能是一个适当的用途