Quintiq file version 2.0
|
#parent: #root
|
StaticMethod AppendFinalize (LibOpt_Task task, stream[JSON] str) as stream[JSON]
|
{
|
Description:
|
[*
|
Add the `LibOpt_Component.OnFinalize` step to the given stream.
|
This will create a new stream that deletes the task after the given stream is finished.
|
*]
|
TextBody:
|
[*
|
component := task.Component();
|
|
do_finalize := str->|component->DoFinalize( task );
|
|
// Handle exception has a higher priority to make sure the run can be set as failed.
|
// When the run is set as failed, no other calls to `OnFinalize` are made.
|
// When a task is finalized, all its children tasks are also finalized.
|
// This means that if the child task throws an error when finalizing, the parent task will too.
|
// By calling the error handling with elevated priority, we force the error handling before any other calls to `DoFinalize`.
|
// This allows us to set the run to be failed, allowing us to stop finalizing tasks and thus stop throwing more errors.
|
handle_error := task->Annotate( ReactiveAnnotation::Priority( 1 ) )->HandleExceptionFinalize( do_finalize->Exception() );
|
|
// Note that the below Merge method is also emitting str.
|
// By using the Merge method, 'str' can be emitted before handle_error and do_finalize are completed.
|
// This leads to a speedup in the optimizer.
|
return str->Merge( handle_error->|stream[JSON]::Success(),
|
do_finalize->IgnoreException() );
|
*]
|
}
|