[Microsoft bot builder sdk] 如何在Microsoft bot应用程序中创建子线程或辅助线程,该应用程序可以不断侦听第三方Web APi并发布消息给不同连接器上的用户。如何在Microsoft bot应用程序中创建子线程或工作线程
我创建了一个bot,并希望该bot能够不断收听第三方Web API。这项工作应该在一个单独的线程中完成。但是,如果我在Dialog类中创建线程,它不会向用户发布响应,因为对话框对象在等待用户输入时被暂停。
[Serializable]
public class SampleDialog : IDialog<object>
{
protected int count = 1;
[NonSerialized]
Thread ChildTask;
public async Task StartAsync(IDialogContext context)
{
ChildTask = new Thread(new ParameterizedThreadStart(RunChildTask));
ChildTask.Start(context);
context.Wait(MessageReceivedAsync);
}
private void RunChildTask(object context)
{
IDialogContext contex = context as IDialogContext;
while (true)
{
this.count++;
contex.PostAsync($"{this.count++}: You said From child");
Thread.Sleep(1000);
}
}
public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var message = await argument;
if (message.Text == "reset")
{
PromptDialog.Confirm(
context,
AfterResetAsync,
"Are you sure you want to reset the count?",
"Didn't get that!",
promptStyle: PromptStyle.None);
}
else
{
await context.PostAsync($"{this.count++}: You said {message.Text}");
context.Wait(MessageReceivedAsync);
}
}
RunChildTask方法被调用但不回发给用户。