In Unity3D, a simple mecanism helps you to make an asynchronous call in a procedural way, and wait for it to finish: coroutines.
This mecanism is not magic. It uses enumerators, that make a code block return a list of values, one by one.
However, you can't get any returning value from a coroutine.
But there's a way to do it anyway.