Skip to main content

Sync Fast Path

If every asset in a load request is already in memory, AsyncLoad Toolkit fires the On Loaded callback in the same frame — without waiting for the next tick and without going through the streaming queue.

Why it matters

Without a fast path, async loads always have at least a 1-frame delay, even for assets that are fully loaded. This causes a visible pop-in or an unnecessary wait when loading screens are driven by async callbacks.

With the fast path enabled, a "load" of already-cached assets feels instant.

How it works

Before issuing a streaming request, the subsystem resolves each path with FSoftObjectPath::ResolveObject(). If every path resolves to a non-null object, the load is considered complete:

  1. An immediately-completed handle is created.
  2. On Loaded / On Completed fires before the load function returns.
  3. No streaming request is ever issued.
Reentrancy

Because On Loaded can fire before Load Asset returns, code placed after the Load Asset node in Blueprint runs after the callback. This is the correct and expected behavior, but be aware of it when debugging.

Enabling / disabling

The fast path is enabled by default via FAsyncKitLoadParams::bAllowSyncFastPath.

To force an async load even for already-in-memory assets (rare, but useful for testing):

Params.bAllowSyncFastPath = false

You can also change the project-wide default in Project Settings → AsyncLoad Toolkit → Default Sync Fast Path.