fix: Task manager exception handling #3839
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes some issues with
aqt.taskman.TaskManager:TaskManager.run_in_background()can raise an exception if there was an exception in a (possibly unrelated) background task that was just completed. When this happens, the new background task is not run and the exception bubbles up to the code that calledrun_in_background().run_in_background()calls in the exception handler withrun_on_main(). We encountered similar issues with this before.TaskManager._closures, and one of the closures raises an exception, the other closures are not called at allProposed changes
TaskManager._on_closures_pending(), catch exceptions and re-raise them usingQTimer.singleShotwith a delay of 0 instead of allowing them to bubble up immediately.run_in_background()is not interrupted by exceptions from closures and the new background task is scheduled successfullyRisks
run_in_background(), or at least document that this can happen.