タスク処理¶
並列処理機能または 直列処理機能で登録されたタスクメッセージは、いずれタスクに変換されてビジネスロジックが実行されます。
実行可能タスク取得¶
タスク実行エンジンはタスク処理サービスを通じて定期的に並列タスクキューおよび直列タスクキューの状態を監視しています。 以下の状態をすべて満たす場合、タスク実行エンジンはタスクメッセージを実行可能と判断し、タスクキューの先頭から取得します。
タスク実行エンジンでは新しいタスクメッセージを受け付けてタスクを実行する余裕がある。
タスクキューに以下のいずれかのタスクメッセージが存在する。
上記の条件に一致するタスクメッセージが複数ある場合、タスクメッセージの受信日時が一番古いものが優先されます。 受信日時が同一のタスクメッセージが複数存在する場合、優先されるタスクメッセージは不定です。
この内容を実行可能タスク取得にも示します。
実行可能として判断され、タスク実行エンジンから取得されたタスクメッセージは処理実行中状態として扱われます。
タスク受付¶
タスク実行エンジンはタスクメッセージを取得すると、自身が「受け付けた」という情報(実行ノード)を該当タスクメッセージに更新します。 この時、受付日時もタスクメッセージに対して更新されます。
受付状態になった場合、イベントが発生します。 詳細はタスク受付を参照してください。
タスク処理開始¶
タスク実行エンジンは受け付けたタスクメッセージをタスクに変換しビジネスロジックを非同期で開始します。
- Taskインタフェースを実装したタスクを登録している場合、run()メソッドが非同期で起動されます。
- サーバサイドJavaScriptを利用してタスクメッセージを登録した場合、該当するJSファイルのrun()関数が呼ばれます。
ビジネスロジック内では、タスクメッセージ登録時のコンテキストを取得することが可能です。
タスクが開始される直前にイベントが発生します。 詳細はタスク処理開始を参照してください。
コラム
複数のタスクが同時に存在する場合、各タスク間の開始順序は受付順とは異なる場合があります。
開始順序を明確にしたい場合は、直列タスクキューを利用してください。
タスク処理完了¶
以下のいずれかの状態になった場合、タスク実行エンジンはタスクのビジネスロジックが完了したと判断します。
- Taskインタフェースを実装したクラスのインスタンスのrun()メソッドが終了した場合(例外発生時も含む)
- JSファイルのrun(parameter)関数が終了した場合(例外発生時も含む)
ただし、いずれの場合もタスク終了通知およびタスク強制中断によって終了した場合は上記の理由に含まれません。
ビジネスロジックが完了した場合、タスク実行エンジンは以下のような事後処理を行います。
- タスクキューから該当するタスクメッセージを削除します。
- タスクに対してイベントを通知します。 詳細はタスク処理完了を参照してください。
また、タスクメッセージが直列タスクキューに登録されたものであり、以下の条件をすべて満たす場合、該当する直列タスクキューの逐次処理は現在の状態に関わらず停止されます。
- 登録時に、例外発生時は直列タスクキューの逐次処理を停止するように指定した。
- タスク実行時に例外が発生した。