This doesn't change any functionality of the RetryableTask. Rather, this means that a TaskOrchestrationExecutor is not required in the constructor for RetryableTask, but can be passed as in argument when it's really needed: in the trySetValue() function. This means that a RetryableTask can be constructed outside the context of a DurableOrchestrationContext (where the TaskOrchestrationExecutor is available), unblocking #418
The reason all these changes are required is because this is the new flow of the TaskOrchestrationExecutor:
TaskOrchestrationExecutor.execute() calls TaskBase.setValue() with a reference of itself -> TaskBase.setValue() calls TaskBase.propagate() -> calls CompoundTask.handleCompletion() -> calls CompoundTask.trySetValue()
This doesn't change any functionality of the
RetryableTask
. Rather, this means that aTaskOrchestrationExecutor
is not required in the constructor forRetryableTask
, but can be passed as in argument when it's really needed: in thetrySetValue()
function. This means that aRetryableTask
can be constructed outside the context of aDurableOrchestrationContext
(where theTaskOrchestrationExecutor
is available), unblocking #418The reason all these changes are required is because this is the new flow of the
TaskOrchestrationExecutor
:TaskOrchestrationExecutor.execute()
callsTaskBase.setValue()
with a reference of itself ->TaskBase.setValue()
callsTaskBase.propagate()
-> callsCompoundTask.handleCompletion()
-> callsCompoundTask.trySetValue()