Application.LoadLevel is asynchronous ????

It looks like Application.LoadLevel is asynchronous because when I do (not a real code):

Application.LoadLevel( "level" );
Instantiate( MyPrefab, etc... );

MyPrefab is instantiated and then instantly destroyed because of LevelLoad logic which destroys all objects loaded BEFORE. Is this a known behaviour or a bug??

How am I supposed to instantiate prefabs in this case???

P.S. I tried to instantiate prefab in OnLevelWasLoaded() and this worked, but I do not like the whole thing because we have LoadLevelAsync for asynchronous loads and LoadLevel() must be synchronous.

Thank you.

It's not really async, no - it just starts the loading at the end of the current frame, and is intentional, not a bug

As you've noticed, using OnLevelWasLoaded is the way to go for instantiating in the next level - the alternative is to have an object as Dont Destroy On Load which starts a coroutine which yields twice (two frames), then instantiates