Quick answer: Unity AssetBundle.LoadAssetAsync callbacks completing in unpredictable order? Async completion is dependency-driven, not request-driven - track order via request IDs, not the order you started.
Loaded UI in order: menu, options, credits. Callbacks fire: credits, menu, options. UI shows in wrong layer.
Track request IDs
var req = bundle.LoadAssetAsync(name);
requests[id++] = req;Process in ID order; defer non-ready ones to the next frame.
Or use a sequence promise
Chain awaits: await req1; await req2;. Forces ordering; loses parallelism (the point of async).
Use AsyncOperation.priority
Higher priority loads finish first. Set explicitly per request rather than relying on call order.
“Async ordering isn't request ordering. Async ordering is completion ordering.”
If your code depends on load order, async isn't the right primitive. Use sync loads for ordered chains; reserve async for unrelated batches.