How to precache map for switching? (or load map asynchronously and then switch)

When game starts it calls UEngine::LoadMap and inside it calls WorldContext.World()->BeginPlay().

But how to load map, without begin play it automatically, but instead only load, and then fast switch if needed?

For example, i have MainMenu,
then i want to have CharacterCreationMenu,
and then i want to have GameWorld.

So, we have 3 different Worlds (maps). But i dont want to waste time when going from one stage to another, so i want to load Stage 2, while i am in Stage 1, and then load Stage 3 while i am in Stage 2.

Or load stage 1, and then continue to load Stage 2 and Stage 3 asynchronously, and then when i enter to Stage 2, i will just switch, if asynchronous loading is complete.

How to?

PS: in other words, i want to have 3 different maps/worlds asynchronously loaded to 3 different variables and then switch them for renderring/playing by demand, first map may be loaded synchronously though.

EDIT1: found 3 clues: ULevelStreaming, FStreamLevelAction, UGameplayStatics::LoadStreamLevel. But dont know how to use them yet.

EDIT2: Level streaming with C++ - C++ - Unreal Engine Forums

EDIT3: My forum thread: How to open level asynchronously, without visible after load? - C++ - Unreal Engine Forums

I have tryed Streaming Levels, but this is not what i need. Because if i make level - Steamable and then use UGameplayStatics::LoadStreamLevel, then level is loaded, but GameMode, PlayerController and HUD is not changed. I need it to be changed, like when normal load map. Any help?

I need something like UGameplayStatics::OpenLevel, but with async load, and with bMakeVisibleAfterLoad = false.

I know this is an old post, but for future reference, see my answer here: