Search Issue Tracker
Fixed in 2018.2.X
Fixed in 2018.1.X
Votes
0
Found in
Issue ID
1004428
Regression
No
Task.Delay(0) Hangs with Async Await
Reported hangs with Async/Await
https://forum.unity.com/threads/task-yield-task-delay-0-hang.518045/
using System.Threading.Tasks;
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
TestAsync();
}
async void TestAsync()
{
int i = 0;
while (true)
{
Debug.Log($"### TestAsync: {++i}");
await Task.Delay(1); // ok
// await Task.Delay(0); // hang!
// await Task.Yield(); // hang!
}
}
}
Update:
I've looked at this issue and found that Task.Delay(0) runs synchronously. You can find details about this behavior on stackoverflow https://stackoverflow.com/questions/36939006/not-using-await-task-delayx-x0-makes-ui-thread-freeze
We have made one change due to this report however. Currently, when processing async/await continuations, we currently process the continuations that are spawned from existing continuations. This is why Task.Yield() would hang. Instead soon (once the changes land in 2018.1), if an "awaited" function calls await again, that continuation will be processed on to the next pass through the player loop. I should mention that we're also considering changes to where we process continuations in the playerloop (currently fixedupdate) since this behavior seems inconsistent in some ways with how other .NET implementations work.
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- “FocusController has unprocessed focus events.” warnings are thrown after adding iOS, tvOS or visionOS Build Profiles
- Holes and different colors appear on default Tree Materials after applying them to the Tree GameObject and undoing changes
- Error indicating that the Text Asset Importer hasn't been disposed properly is logged when switching Importer Type in a Focused Inspector
- Documentation installation shows "Install failed: Validation Failed" when installing Android Build Support module
- Error indicating that the Package Manifest Importer hasn't been disposed properly is logged when switching Importer Type in a Focused Inspector
Add comment