メッセージがまばらになるまで応答を保持することで、ボットをより流動的にしようとしています。
私のアイデアは単純でした。メッセージを受信するたびに、遅延タスクを生成して、最近のアクティビティに応答する必要があるかどうかを将来の私に通知します。
using System;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Connector;
namespace GupyInterviewBot.Dialogs
{
[Serializable]
public class InterviewDialog : IDialog<object>
{
private int _patience = 0;
public async Task StartAsync(IDialogContext context)
{
_patience = 0;
context.Wait(PatientReadAsync);
}
public async Task PatientReadAsync(IDialogContext context, IAwaitable<IActivity> awaitable)
{
var activity = await awaitable;
if (activity.Type == ActivityTypes.Message)
{
HoldOn();
context.Wait(PatientReadAsync);
}
else
{
await context.PostAsync("My patience is running out: " + _patience);
context.Wait(PatientReadAsync);
}
}
private void HoldOn(int seconds = 3)
{
Task.Run(async () =>
{
_patience += 1;
await Task.Delay(seconds * 1000);
_patience -= 1;
});
}
}
}
問題は、_patience
カウンターが増加するだけで、決して減少しないということです。理由はわかりません。フレームワークについて言及せずにこの質問を投稿しましたが、コンソール アプリケーションで MWE を見つけようとした後、すべてが機能しました。フレームワークが状態を保持する方法に関連する何かがあると思いますが、よくわかりません。
_patience
いくつかのメッセージを送信Ping
してから、ボット エミュレーターでいくつかのアクティビティを送信することで、増加しているだけであることを証明できます。