Navigate:
UniTask
~$UNITA0.3%

UniTask: Allocation-free async/await for Unity

Zero-allocation async/await using structs and custom method builders.

LIVE RANKINGS • 10:20 AM • STEADY
OVERALL
#246
33
DEVELOPER TOOLS
#43
6
30 DAY RANKING TREND
ovr#246
·Devel#43
STARS
10.5K
FORKS
971
7D STARS
+31
7D FORKS
+4
See Repo:
Share:

Learn more about UniTask

UniTask is a high-performance asynchronous programming library for Unity that provides allocation-free async/await functionality through value-type task structures. It replaces the standard .NET Task-based model with custom struct-based implementations and specialized async method builders that avoid heap allocations during asynchronous operations. The library integrates directly with Unity's player loop system to schedule continuation callbacks without requiring additional thread synchronization or context switching overhead. It provides awaitable wrappers for Unity-specific operations such as frame delays, coroutine integration, and lifecycle events, enabling async patterns within Unity's single-threaded execution model. The zero-allocation design significantly reduces garbage collection pressure in performance-critical game scenarios where frequent asynchronous operations would otherwise cause memory churn.

UniTask

1

Struct-based implementation

UniTask uses value types (structs) instead of reference types for task objects, combined with custom AsyncMethodBuilder to eliminate heap allocations during async/await operations. This reduces garbage collection pressure compared to standard Task-based approaches.

2

PlayerLoop integration

Operations execute within Unity's PlayerLoop system rather than on background threads, ensuring compatibility with single-threaded platforms like WebGL and wasm. This design allows frame-based timing and synchronization with Unity's lifecycle events.

3

Awaitable Unity APIs

The library wraps Unity's AsyncOperations, coroutines, and UI events as awaitable objects, allowing them to be used directly with async/await syntax. It also provides PlayerLoop-based alternatives to coroutine operations like WaitForSeconds and yield return null.


using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;

public class BasicUniTaskExample : MonoBehaviour
{
    async UniTask<string> LoadAssetsAsync()
    {
        // Await Unity's AsyncObject operations
        var asset = await Resources.LoadAsync<TextAsset>("config");
        
        // Await web requests
        var webRequest = UnityWebRequest.Get("https://api.example.com/data");
        var response = await webRequest.SendWebRequest();
        string jsonData = response.downloadHandler.text;
        
        // Load scenes asynchronously
        await SceneManager.LoadSceneAsync("GameScene");
        
        return jsonData;
    }
}

See how people are using UniTask

Loading tweets...


[ EXPLORE MORE ]

Related Repositories

Discover similar tools and frameworks used by developers