Well that depends on your programming language. Remember that the apis can be called (when bindings are done) by many languages, so polling techniques are slightly diffenrent depending on the type of laguage used. So correct is dependent on the language used.
The principle in polling is to not waste system resources (particularly cpu).
The better way than polling is to hang an event on the finishing of the async function so that your process sleeps till the api returns. This is far better than polling. You could even do other things will waiting on the event. Even shell scripting “languages” (bash etc) allow you to wait till another child process completes.
Now to talk about async
With sync you are blocked till the api finishes and thus unable to do any other processing. With async you can return to your other processing while the api runs to completion.
Why do people prefer this. Well if your program is processing data from SAFE and does screen updates and waits for input from the user and so on, then a simple way is to have a state machine or master loop in which you perform certain tasks in an orderly fashion. Obviously this is just a simple form of a program. But it allows the master loop to continue running handling user input, screen updates etc while waiting for that file or MD object to be retrieved. Now with sync functions that master loop has to wait for the api to finish and the user gets a jittery experience. OR else you have to do code to essentially make the sync function into an async function.