Fix exception handling for multiple Task-based event handlers#603
Merged
Conversation
ikkentim
requested changes
Jun 19, 2026
Contributor
Author
|
@ikkentim The requested changes have been implemented. |
ikkentim
approved these changes
Jun 23, 2026
Contributor
Author
|
@ikkentim This PR is now ready to be merged. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
This PR fixes an issue where exceptions from
Task-based event handlers could go unobserved when multiple handlers were registered for the same event.Problem
EventDispatcheronly callsHandleTaskon the final event result returned byInnerInvoke.As a result, when multiple event handlers return a
Task, only the last task is observed for exceptions. Any faulted tasks returned by previous handlers are silently ignored.For example:
Current behavior:
Expected behavior:
Root Cause
InnerInvokeiterates through all registered handlers and stores only the last non-null result:Later,
HandleTaskis only called for the final result:This means that faulted tasks returned by earlier handlers are never observed.
Solution
Observe tasks as soon as they are returned by an event handler:
This ensures that every task returned by every event handler is monitored for exceptions, regardless of the final event result.
Validation
The issue was reproduced using multiple
Task-based handlers registered for the same event:After this change all exceptions are correctly reported: