如何处理Botframework SDK3 C#中的超时

时间:2018-08-29 09:13:49

标签: botframework

很抱歉我是一个新手,我有很多问题。

我的机器人状态保存在数据库中。因此它永远不会超时。我使用团队。 但是,如果用户在10分钟内未回复,我想重新开始对话。

这是我的解决方案。 根据{{​​3}},我还制作了一个静态词典,可以帮助我轻松地处理每个对话的计时器。在this的帮助下,我确实中断了堆栈。但是,一旦完成,它将回到原始对话。解决这个问题。我根据Sample Code

清除了状态

1 个答案:

答案 0 :(得分:2)

我敢肯定有很多方法可以解决这个问题,但这是您可以尝试的一种方法。

在您的Global.asax中

为您的线程定义此取消令牌来源

 CancellationTokenSource _getTokenAsyncCancellation = new CancellationTokenSource();

在Application_Start()代码中,设置带有while循环的Task线程。看起来像这样:

Task.Factory.StartNew(async () =>
            {
                while (!_getTokenAsyncCancellation.IsCancellationRequested)
                {
                    try
                    {
                        //Check timespan between last message timestamp vs NOW
                        //if timespan > 9 minutes
                        //   send message 
                    }
                    catch (Exception ex)
                    {
                        Trace.TraceError(ex.Message);
                    }
                    await Task.Delay(TimeSpan.FromMinutes(1), _getTokenAsyncCancellation.Token).ConfigureAwait(false);
                }
            }).ConfigureAwait(false);

此外,添加Application_edn方法以彻底清除问题

protected void Application_End()
        {
            _getTokenAsyncCancellation.Cancel();
        }

现在,您还没有完成。您还需要一些跟踪用户的最后一条消息时间戳。基本上,每次自动程序收到用户的新消息时,您都会设置此时间戳,而while循环中的代码将对此进行检查。

我希望这会有所帮助,并为您提供一些尝试方法的想法。