並列処理内で発生したエラーのハンドリング方法

並列処理内でエラーが発生すると同じxaml(Parallel.xaml)でCatchされずに処理が終了します。
呼び出し元(Main.xaml)でCatchする以外に同じxaml内でCatchさせる方法はないでしょうか。

並列処理.zip (4.5 KB)

手元の環境で試しましたが、想定通りTry-Catchで例外捕捉しているようですが、どのように確認されましたでしょうか?

いつもお世話になっております。
デバッグで検証していますが、
私の環境ではCatchされず、Mainに戻ってしまいます。
UiPathのverは2023.10.3を使用しています。

Parallel.xaml - ワークフロー ファイルを呼び出し: キャンセル中に ID 143 のアクティビティ ‘ErrWorkflow.xaml - ワークフロー ファイルを呼び出し’ が例外をスロー、または伝達しました。

私の環境ではCatchされず、Mainに戻ってしまいます。

どのような結果を期待していますか?Catch内でrethrowしているのでMainに例外として戻るのは所定の動作と思いますが。

再スローにブレイクポイントを設定してデバッグ実行するか、リボンメニューのアクティビティをログを有効にして実行経路を明確にしてみてはと思います。

こちらは共有用のためかなり簡略化しているのですが、
本来はParallel.xaml内でエラーになった際にexception.Dataに実行状況を格納しています。
そのためどうしてもParallel.xaml内でCatchしたいと思っています。
Catchの再スローにブレイクポイントを設定して、デバッグ実行しましたが、止まることなくMainに戻りました。

念のためParallel.xaml内のCatchにLog Messageアクティビティを配置しましたが、
ログには出力されていないことからCatchされていないのだと思います。
並列処理.zip (5.7 KB)
2024-04-25_Execution.zip (1.4 KB)

リボンメニューのアクティビティをログを有効にして実行経路を明確にしてみてはと思います。

こちらでログ取得できませんでしょうか?

あと試すとすればTryのすぐ内側にSequenceを追加して改善するかの確認でしょうか。

どうやら実行とデバッグ実行とで結果が違うようです。

デバッグ実行ですと以下のように正常動作ですが

通常実行ですと、たしかに例外捕捉されませんね
TryCatchの前にリトライスコープも正常に動作していないように見えます。

もう少し見てみたいと思います。

Try直下にSequenceを配置してもCatchされないですね

リトライスコープを消した場合も確認してみましたが、同様の動きになりました。

こんにちは

別の23.10.3の環境で試してみました。23.12の環境よりも高速な環境なのですが、デバッグ実行でも事象再現しました。

並列中であるレーンで例外が発生すると、他のレーンはキャンセル処理が走るのですが、そのあたりの処理がうまくいっていないように思えます。リトライスコープの処理あたりも含めてもろもろ怪しそうでしたので以下の様に書き換えてみました。一度試してみてもらえればと思います。

ErrWorkflow
当該xamlファイル内で例外補足、例外内容を引数として呼び出し元に返す。

Parallel
呼び出し先から返ってきた例外の有無で繰り返し要否判断。繰り返し数の上限を設定。

サンプル
並列処理v3.zip (6.6 KB)

(最後例外を返す処理が抜けていましたので、サンプル更新しました)

1 Like

いただいた内容で実装したいものができました。
ありがとうございました!

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.