ロック ワークフロー アクティビティ
[ロック] アクティビティは、ロックが解除されるまで、ワークフローの他のインスタンスがこのアクティビティを通り越して継続されないようにします。
同じワークフローの複数のインスタンスが同時に実行されることがあります。たとえば、レコードが特定のテーブルに追加されたときにワークフローがトリガーされた場合などです。このワークフローは、レコードが挿入されるたびに複数のレコードが次々に追加された場合、複数回トリガーされます。ロックアクティビティを使用して、ワークフローのこのインスタンスが 1 つ以上のアクティビティを終了してから、ワークフローの他のインスタンスを続行できるようにすることができます。
ワークフローは、 [ロック解除] アクティビティにより明示的にロックを解除できます。ロックは、[最大期間] が完了した場合も解除されます。
ワークフローのインスタンスが [ロック] アクティビティに到達すると、[ロック] アクティビティで指定されたキーを使用してロックを取得しようとします。別のインスタンスがすでにロックを取得していて、まだ解放していない場合、このロック試行は失敗します。インスタンスは [最大試行回数] に達するまで、引き続きロックの取得を試行します。
ロックアクティビティの前に 1 秒タイマーアクティビティを配置することをお勧めします。これにより、ロックアクティビティがあるワークフロー インスタンスを別のワークフロー インスタンスと区別できない稀な状態を防ぐことができます。この状態は、ロックを所有するエンティティが特定のワークフロー インスタンスではなく、そのインスタンスが実行されているコード実行スレッドであるために発生します。ほとんどの場合、各ワークフローインスタンスは、異なるスレッドで実行されます。タイマーアクティビティを追加することで、この動作が確実になります。
- 承認アクティビティ
- タスク アクティビティ
- タイマーアクティビティ
- 条件待ちアクティビティ
- WF イベント待ちアクティビティ
- PowerShell スクリプトなどの MID サーバーアクティビティ
結果
| 結果 | 説明 |
|---|---|
| 成功 | アクティビティはロックを正常に取得しました。ワークフローのこのインスタンスはこの時点を過ぎても継続できますが、他のインスタンスはロックが解放されるまで継続できません。 |
| 失敗 | 最大試行回数に達するまでロックを取得しようとしましたが、アクティビティはロックを取得できませんでした。 |
入力変数
アクティビティの初期動作が、入力変数によって決まります。
| フィールド | 説明 |
|---|---|
| キー | 一意のミューテックス キー。ロック解除 アクティビティはこのキーを使用してロックを解除します。 |
| 期間 | |
| 最大期間 | ロックが持続する最大時間。ロックはこの期間に達すると解除されます。この方法によるロック解除は、[ロック解除] アクティビティの実行と同じです。 |
| ロック試行 ロック試行が拒否された場合のアクティビティの動作を指定します。最後のロック試行が失敗した場合、アクティビティのステータスは「タイムアウト」に設定され、アクティビティの結果は「失敗」に設定されます。 |
|
| 最大試行回数 | アクティビティがロックを取得しようとする最大回数を指定します。 |
| 試行間の遅延 | ロック試行が失敗してから、次のロック試行が許可される前までに必要な時間。 |
状況
アクティビティ状況は、ワークフロー エンジンがアクティビティを処理する方法を指示します。
| 状況 | 説明 |
|---|---|
| 待機中 | ワークフロー エンジンがロックを取得するのを待機しています。 |
| 完了 | アクティビティはロックを正常に取得しました。 |
| タイムアウト | アクティビティは、[最大試行回数] 入力変数で指定された試行回数内でロックを取得することができませんでした。 |