Incoming packets are by nature Async. Most things in Unity require you to be on the main thread.
For example: I have a login screen where it disables parts of the UI when you click the button to login. When I receive a bad response I would like to enable the UI so they can try again.
The only ways I can think to handle this is to store a bool that changes with the incoming packet and check that bool every update. That seems hackish to me. Is there some type of system where I can queue these tasks into a list and just go thru them some specified time during the update?