##概要
UiPathでは、一部のアクティビティはTimeoutプロパティを持っておらず、
そこで固まるとエラーにもならず処理がその場で止まってしまうということが起こりえます。
それを回避する策として、ParallelでDelayとThrowを並べる方法が以下で紹介されていますが、
これは本当に有効なのか?というところを確認してみます。
##検証
Timeoutプロパティを持たない「Excel Application Scope」にParallelを並べて、
途中で処理を打ち切ってタイムアウトできるかを検証します。
###Excelを開く
まず、A1セルからF1048576セルまで=NOW()で埋め尽くした重いExcelを用意し、
UiPathでそのExcelを開くだけのワークフローを作ります。
###DelayとThrowを並べる
念のためこちらも単体で動作確認します。
Delayは5秒、ThrowはTimeoutExceptionをスローさせ、わかりやすいようにTryCatchで囲んでログを出します。
結果がこちら。ここまでは想定通りですね。
###Parallelで並べる
問題はここから。作った2つのシーケンスをParallelで一つにまとめます。
Parallelの条件プロパティには忘れずにTrueを設定。
これでExcelを開くのに5秒以上かかったらエラーをスローするワークフローを作ったつもりですが…。
結果がこちら。
残念ながら普通にExcelを20秒弱かけて読み込んだだけで終わってますね。エラーも出ていません。
###デバッグモードで動きを見る
低速ステップを使って動きを見るとこんな感じです。(※倍速再生)
##結論
結論として、ParallelでDelayとThrowを並べてもタイムアウトの代用にはならないようです。
環境によるのかもしれませんが…。
なぜこうなるのか?というところですが、
以下の記事でParallelの動きについて解説されています。
厳密な並列処理は今のところ難しいようですね。
##動作環境
- UiPath Studio Pro 2020.4.3 Community License
- UiPath.Excel.Activities 2.6.3
- UiPath.System.Activities 19.8.0
- Microsoft Excel 2013