2016-08-18 4 views
1

ダイアログのIDialogContextメソッドFailの使い方を理解できません。親ダイアログに例外を送信することになっていることを理解していますが、これはどこで行われますか?私はResumeAfterメソッドだと思いますが、私は完全にはわかりません。ダイアログ内でcontext.Fail()を使用する方法

私はルートダイアログから分岐するいくつかのダイアログを持っているので、私はこれを聞いています。そして、例外をルートに戻して元の場所に戻す方法を見つけようとしています。Conversations.SendAsyncコントローラ。これを行う例は素晴らしいでしょう。

答えて

4

例外を処理する良い方法が見つかりました。明示的に例外を含むコンテキストを終了する場合は、context.Failが表示されます。例外がダイアログ内の他の場所にスローされ、キャッチされない場合、親ダイアログに伝播され、ResumeAfterメソッドで受け取ることができます。例えば。

public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument) 
{ 
    var message = await argument; 
    await context.Call(new ChildDialog(), AfterMessageAsync); 
} 

private async Task AfterMessageAsync(IDialogContext context, IAwaitable<object> result) 
{ 
    try 
    { 
     var childResult = await result; 
     await context.PostAsync($"ended child with: {childResult}"); 
    } 
    catch (Exception ex) 
    { 
     await context.PostAsync($"ended child with exception: {ex.StackTrace}"); 
    } 
} 
関連する問題