第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Botframework v4:從沒有計(jì)算器異常的子對(duì)話框調(diào)用父對(duì)話框

Botframework v4:從沒有計(jì)算器異常的子對(duì)話框調(diào)用父對(duì)話框

C#
函數(shù)式編程 2022-11-21 16:30:15
據(jù)此我認(rèn)為現(xiàn)在可以從子對(duì)話框調(diào)用父對(duì)話框。之前我不能這樣做,因?yàn)樗鼤?huì)導(dǎo)致堆棧溢出異常。我已經(jīng)更新到 SDK 4.3 有誰知道如何實(shí)施這些更改嗎?主對(duì)話框調(diào)用對(duì)話框 A。WaterfallStep[] waterfallSteps = new WaterfallStep[]     {        FirstStepAsync,        SecondStepAsync,        ThirdStepAsync,     };    AddDialog(new WaterfallDialog(InitialId, waterfallSteps));    AddDialog(new DialogA(DialogAId));  return await stepContext.BeginDialogAsync(DialogAId, cancellationToken: cancellationToken);Dialog A 調(diào)用 Dialog Achild    WaterfallStep[] waterfallSteps = new WaterfallStep[]     {        FirstStepAsync,        SecondStepAsync,        ThirdStepAsync,     };    AddDialog(new WaterfallDialog(InitialId, waterfallSteps));    AddDialog(new DialogAchild(DialogAchildId));   return await stepContext.BeginDialogAsync(DialogAchildId, cancellationToken: cancellationToken);Dialog Achild 調(diào)用MainDialog,但這會(huì)產(chǎn)生Stack 溢出異常。WaterfallStep[] waterfallSteps = new WaterfallStep[]     {        FirstStepAsync,        SecondStepAsync,        ThirdStepAsync,     };    AddDialog(new WaterfallDialog(InitialId, waterfallSteps));    AddDialog(new MainDialog(MainDialogId));  return await stepContext.BeginDialogAsync(MainDialogId, cancellationToken: cancellationToken);
查看完整描述

1 回答

?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊

假設(shè)您在對(duì)話框的構(gòu)造函數(shù)中添加對(duì)話框,那么您將產(chǎn)生一個(gè)無限循環(huán),最終導(dǎo)致您所描述的堆棧溢出。


MainDialog --> DialogA --> DialogAchild --> MainDialog --> infinite loop

您提到的 PR 指的是一個(gè)稍微不同的問題。


解決此問題的一種方法是從構(gòu)造函數(shù)中刪除導(dǎo)致最終循環(huán)的 AddDialog 方法。相反,將調(diào)用移至 AddDialogA() 之類的方法,并僅在需要時(shí)調(diào)用它。


根據(jù)您的場(chǎng)景,您可以構(gòu)建一個(gè)提供此類功能的基本對(duì)話框。


這是您可以在必要時(shí)AuthenticatedDialog添加的產(chǎn)品示例。OnboardingDialog請(qǐng)注意,入職對(duì)話框本身繼承自 AuthenticatedDialog,當(dāng)您不卸載AddDialog()呼叫時(shí),這也會(huì)導(dǎo)致無限循環(huán)。


在基本對(duì)話框中抽象它很好,因?yàn)樗鼮槟峁┝艘恍┛梢允褂玫?API??紤]將您的內(nèi)容命名為 AddComponentDialog 或 UseComponentDialog。這樣你就很好地表達(dá)了你的意圖,潛在的讀者一開始就知道你正在使用可重用的組件。


AuthenticatedDialog.cs


using Microsoft.Bot.Builder.Dialogs;

using Microsoft.Bot.Schema;

using Bot.Dialogs.Authentication;

using Bot.Dialogs.Main;

using Bot.Dialogs.Onboarding;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading;

using System.Threading.Tasks;


namespace Bot.Dialogs.Shared

{

    public class AuthenticatedDialog : EnterpriseDialog

    {

        private BotStateAccessors _accessors;

        private BotServices _botServices;


        public AuthenticatedDialog(BotServices botServices, string dialogId, BotStateAccessors accessors) : base(botServices, dialogId)

        {

            _accessors = accessors;

            _botServices = botServices;


            AddDialog(new AuthenticationDialog("", accessors));

        }


        protected async Task<DialogTurnResult> AskForOnboardingAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken, object stepResult = null)

        {

            return await stepContext.BeginDialogAsync(nameof(OnboardingDialog), stepResult, cancellationToken);

        }


        protected void AddOnboardingDialog()

        {

            AddDialog(new OnboardingDialog(_botServices,_accessors));

        }


    }

}

DialogA.cs


public class DialogA : AuthenticatedDialog

{


        public DialogA(BotServices botServices, BotStateAccessors accessors) : base(botServices, nameof(DialogA), accessors)

        {


            var preferencesDispatchSteps = new WaterfallStep[]

            {

                WaterfallStepA,

                WaterfallStepB

            };


            AddDialog(new FooDialog);

            AddOnboardingDialog();

        }

}


查看完整回答
反對(duì) 回復(fù) 2022-11-21
  • 1 回答
  • 0 關(guān)注
  • 74 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)