why `orSubmitInternal` rather than `submitInternal`? Looks like it does immediately submit the task.