If you are already familiar with CSharp you may have heard of
Task. If so, skip ahead to
Coroutines Vs Async.
Lets say you need to make a web request to a remote server and it takes 1 second to respond. If you were to use synchronous code (where every instruction runs one after the other) your program would freeze for 1 full second waiting for the response.
This might not be a problem for some small program that runs in the background but this is a massive problem for a game server where a server lag spike will anger players.
Luckily there is a solution:
This allows you to run the web request in the background.
While the web request is being processed the code that does not depend on the result of the web request will continue to execute.
When used correctly this prevents slow actions from freezing your program. Examples include:
- Web Requests
- File Reads / Writes
- Database Access
However, there is one 'gotcha' with
Async can be made to run on a separate thread, but by default will run on the main thread.
Coroutines always run on the main thread meaning it is safe and no extra considerations need to be taken
Beyond the usual dangers when multi-threading, Unity will throw an error if you try to use any unity functions from a separate thread.
Coroutines are almost always required when splitting up work over multiple frames.
Let go over each part of the function above.
Type that can be looped over to return values one by one.
yield return _____
Return an item and continue executing the function
yield return break
Return nothing but stop execution of the program
yield return null
Return a null value and continue execution the function
This means wait for a single frame before continuing execution