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

如何处理botframework SDK3 C中的超时#,botframework,Botframework,我很抱歉,我是一个新手,我有这么多问题 我的机器人状态保存在数据库中。所以它永远不会超时。我使用团队。 但如果用户在10分钟内没有回复,我想重启对话 这是我的解决方案。 据我所知,我还制作了一本静态字典,它可以帮助我轻松地处理每一次对话的计时器。在的帮助下,我打断了堆栈。但一旦结束,它将回到最初的对话。解决这个问题。我根据清除了状态我相信有很多方法可以解决这个问题,但这里有一种方法你可以尝试 在您的Global.asax中 为线程定义此取消令牌源 CancellationTokenSource

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

我的机器人状态保存在数据库中。所以它永远不会超时。我使用团队。 但如果用户在10分钟内没有回复,我想重启对话

这是我的解决方案。
据我所知,我还制作了一本静态字典,它可以帮助我轻松地处理每一次对话的计时器。在的帮助下,我打断了堆栈。但一旦结束,它将回到最初的对话。解决这个问题。我根据

清除了状态我相信有很多方法可以解决这个问题,但这里有一种方法你可以尝试

在您的Global.asax中

为线程定义此取消令牌源

 CancellationTokenSource _getTokenAsyncCancellation = new CancellationTokenSource();
在应用程序中,用while循环设置一个任务线程。它看起来像这样:

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();
        }
现在,你还没做完。您还需要跟踪用户最后一条消息的时间戳。基本上,每次bot从用户那里接收到一条新消息时,yo都会设置这个时间戳,while循环中的代码会对此进行检查


我希望这会对你有所帮助,并为你提供一些想法。

我相信有很多方法可以解决这个问题,但这里有一种方法你可以尝试

在您的Global.asax中

为线程定义此取消令牌源

 CancellationTokenSource _getTokenAsyncCancellation = new CancellationTokenSource();
在应用程序中,用while循环设置一个任务线程。它看起来像这样:

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();
        }
现在,你还没做完。您还需要跟踪用户最后一条消息的时间戳。基本上,每次bot从用户那里接收到一条新消息时,yo都会设置这个时间戳,while循环中的代码会对此进行检查


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

非常感谢您。。对不起,我真的是个新手。你能告诉我如何在这里发送信息吗?//发送信息”。什么时候调用Application_End?这开始变得非常复杂,可能是一个单独的问题。看看GitHib中的这个。它展示了如何创建和发送临时消息。这就是你将在你的线程中所做的。您需要一种方法来获取所有必要的ID和值。您可能会将最后一条消息时间存储在状态中。谢谢。你有没有办法结束MS团队中的所有对话?非常感谢。。对不起,我真的是个新手。你能告诉我如何在这里发送信息吗?//发送信息”。什么时候调用Application_End?这开始变得非常复杂,可能是一个单独的问题。看看GitHib中的这个。它展示了如何创建和发送临时消息。这就是你将在你的线程中所做的。您需要一种方法来获取所有必要的ID和值。您可能会将最后一条消息时间存储在状态中。谢谢。你有没有办法结束MS团队中的所有对话?