Search Issue Tracker

Fixed in 2020.2.X

Fixed in 2019.4.X, 2020.1.X



Found in





Issue ID




[WebGL] Async Tasks do not run on WebGL when Threading is enabled



Reproduction steps:
1. Open the attached project ("")
2. Open the repro scene ("SampleScene")
3. Enter Play Mode
4. Notice the logs about async tasks being printed out to the screen
5. Exit Play Mode and make a WebGL build
6. Run the build and inspect the printed messages on the screen

Expected result: Async task messages are printed to the screen
Actual result: Only 'Start' and 'End' messages are printed to the screen (async tasks doesn't run)

Reproducible with: 2019.3.14f1, 2020.1.0b9, 2020.2.0a11
Couldn't test with 2018.4 (errors when building the project)

Tested with: Chrome (81.0.4044.138)

  1. Resolution Note (fix version 2020.2):

    IL2CPP wasn't generating the correct threaded code when threadingSupport flag was set in the project settings. Fixed in 2020.2.0a16

  2. Resolution Note (fix version 2020.1):

    Fixed in 2020.1.0b17.4177

  3. Resolution Note (fix version 2019.4):

    Fixed in - 2019.4.7f1

Comments (8)

  1. Duardo712

    Jun 30, 2023 23:45

    The plugin I commented about below actually caused my project to crash after a while, so I don't recommend using it (I believe it makes everything single-threaded, even the Editor code). A simpler solution I came up with was:

    1. Define a singleton GameObject.
    2. Define a replacement for Task.Delay which returns a Task generated from a TaskCompletionSource. The task completes after the desired delay, using the singleton's StartCoroutine to implement the waiting.

  2. Duardo712

    Jun 30, 2023 20:48

    2021.3.19f1 still not working. A workaround is to download Mono.Cecil from NuGet and use I did this and it worked.

  3. Siccity

    Jul 29, 2022 09:00

    Still not fixed in 2019.4.26f1

    Just found this out after replacing all my coroutines with async/await :D

  4. AndersenCastaneda

    Jul 07, 2022 19:07

    Task.Delay() is implemented for WebGL, but it uses a System.Timer, which requires threading support, and because of that is not compatible.
    code source:

    Replace Task.Delay() with Task.Yield() and the code will work on WebGL.

  5. jacobsmith3204

    Jan 23, 2022 03:43

    I've tried this in 2020.3.26f1, 2019.4.34.f1 (LTS) and 2019.4.7f1
    and none of those have worked. (first 2 being the latest (LTS) builds)

  6. David_GameDev

    Jan 20, 2022 14:16

    Can confirm, still not working in 2021.2.7f1

  7. Tom-Mensink

    Feb 22, 2021 19:33

    Why is this closed, doesn't work in 2019.4.8f1 either.

  8. vvmichalk

    Jan 13, 2021 12:31

    Just tested in 2019.4.7f1, it does not work.
    Simple thing like this does not work:

    Test.text = "1";
    await Task.Delay(1000);
    Test.text += "2";
    await Task.Delay(1000);
    Test.text += "3";

    Unity only pretends it's multi-platform, it's actually multi-pain.

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.