Fix exceptions never being reported when UniTask is executed without await and Forget() #323
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.
Fixes issue #315
I tried following your advice to replace
Exception ex
withExceptionHolder
. However, it does not resolve the issue because the following happens:ExceptionHolder
is created and assigned to the field.UniTask.FromException(ex.GetException().SourceException)
is returned.GetException()
suppresses theExceptionHolder
's finalizer.Instead, I found that the issue lies in another part of the code.
AsyncUniTaskMethodBuilder.Task
getter is executed even if the task is not assigned to a variable:Thus, we can't know if the task returned by the Task getter is going to be awaited or not. We need a backup for a case when the task is not going to be awaited.
In the end, I added a finalizer to
ExceptionResultSource
:It acts the same as
ExceptionHolder
. If the exception is thrown, the finalizer will be suppressed. But if the task is never awaited, the finalizer will publish the exception.