У меня есть Maindialog с функцией CompleteAsyn c, которая запускается, когда дочерний диалог вызывает stepContext.EndDialogAsync();
protected override async Task CompleteAsync(DialogContext dc, DialogTurnResult result = null, CancellationToken cancellationToken = default(CancellationToken))
{
await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.NewUserGreeting);
await dc.BeginDialogAsync(nameof(ProductFlowDialog));
}
Когда он запускается, начальный шаг водопада ребенка диалог никогда не вызывается. Чтобы временно устранить проблему, я переместил вызов await dc.BeginDialogAsync(nameof(ProductFlowDialog))
в функцию routeAsyn c.
protected override async Task CompleteAsync(DialogContext dc, DialogTurnResult result = null, CancellationToken cancellationToken = default(CancellationToken))
{
await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Completed);
}
protected override async Task RouteAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken))
{
_responder = new MainResponses();
await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.NewUserGreeting);
await dc.BeginDialogAsync(nameof(ProductFlowDialog));
}
Проблема с этим решением заключается в том, что конечный пользователь должен что-то набрать в чат, чтобы возобновить диалог. Я хочу автоматически перезапустить новый поток диалога после его окончания.