You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Context / Problem
DOTween exposes async/Task-based instructions when targeting .NET 4.6+ / .NET Standard 2.0.
On WebGL, Task-based async APIs are not supported in a meaningful or safe way due to the single-threaded execution model and lack of real threading. This leads to silent hangs or undefined behavior rather than explicit failures.
What was changed
Excluded DOTween async instructions from compilation on UNITY_WEBGL.
Added !UNITY_WEBGL to the existing preprocessor guards for async-related code paths.
Applied consistently across:
UnityExamples
UnityTests (multiple Unity versions)
Prebuilt DOTween assembly sources
Why this approach
Enforces correctness at compile time, not runtime.
Prevents accidental usage of unsupported async APIs on WebGL.
Aligns with WebGL platform constraints and avoids silent runtime failures.
Impact
No behavior change for non-WebGL platforms.
On WebGL, async/Task-based DOTween APIs are no longer available, making platform limitations explicit.
Risk
Low. Change is limited to conditional compilation and does not affect runtime logic on supported platforms.
Apologies if it took me a while to get back to you, but I was both finishing some other DOTween stuff and unsure if this merge made sense. As far as I know, and can see in the documentation, only Task.Delay doesn't work in WebGL, and DOTween doesn't use it. To be on the safe side I made a test, which you can see here, and DOTween's AsyncWaitForCompletion (which works like DOTween's other async methods via Task.Yield) works correctly.
Let me know if I missed something, and cheers,
Daniele
The concern isn’t whether Task.Yield works today.
The concern is that allowing Task-based async in WebGL expands the semantic surface to constructs that WebGL cannot guarantee (blocking, timers, threading assumptions).
Even if DOTween currently uses only Yield, keeping Tasks namespace out of WebGL builds preserves a stricter invariant and reduces future misuse risk.
Best, Nick
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
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.
Context / Problem
DOTween exposes async/Task-based instructions when targeting .NET 4.6+ / .NET Standard 2.0.
On WebGL,
Task-based async APIs are not supported in a meaningful or safe way due to the single-threaded execution model and lack of real threading. This leads to silent hangs or undefined behavior rather than explicit failures.What was changed
Excluded DOTween async instructions from compilation on
UNITY_WEBGL.Added
!UNITY_WEBGLto the existing preprocessor guards for async-related code paths.Applied consistently across:
Why this approach
Impact
Risk
Low. Change is limited to conditional compilation and does not affect runtime logic on supported platforms.