Microsoft BotFramework v4 用计时器替换对话框问题

Microsoft BotFramework v4 replace Dialog problem with Timers

我正在尝试为异步任务使用 System.Timers 计时器,但出现错误“无法访问已释放的对象" 当我试图在 Waterfallstep 中重置我的对话框时。

我已经尝试 GC.KeepAlive 但没有成功。我正在使用机器人框架 SDK4net core 3.1.

我试过System.Threading.Timer,但还是出现了同样的错误。

主动消息不符合我一段时间后重置整个对话框的要求。

https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-proactive-message?view=azure-bot-service-4.0&tabs=csharp

我将感谢你对这种情况的帮助。

我的代码

        {
            System.Timers.Timer timer;
            var dialogSet = new DialogSet(accessor);
            dialogSet.Add(dialog);
            var dialogContext = await dialogSet.CreateContextAsync(turnContext, cancellationToken);
            var results = await dialogContext.ContinueDialogAsync(cancellationToken);

            if (results.Status == DialogTurnStatus.Empty)
            {
                await dialogContext.BeginDialogAsync(dialog.Id, null, cancellationToken);
            }
            else
            {
                await dialogContext.ReplaceDialogAsync(dialog.Id, null, cancellationToken);
            }

            timer = new System.Timers.Timer(1000 * (60 * 1));
            timer.Elapsed += async (sender, e) => await dialogContext.ReplaceDialogAsync(dialog.Id, null, cancellationToken);
            timer.Start();
            System.GC.KeepAlive(timer);
        }

这方面的纪录片很多,大部分案例都与本期类似。您需要使用 *PUT api/category*

设置您的控制器操作

https://entityframeworkcore.com/knowledge-base/57952486/using-async-repository-pattern---cannot-access-a-disposed-object

检查上面的 link 以使用 async Task