Because the sync function does not know what to do in case the async function doesn't return immediately and awaits something else. It can't block because that would block the whole thread, possibly including UI. Spawning a new thread and blocking there would break the whole point of async and would be expensive.