From my understanding one of the main things that async and await do is to make code easy to write and read - but is using them equal to spawning background threads to perfo
Simple Analogy
A person may wait for their morning train. This is all they are doing as this is their primary task that they are currently performing. (synchronous programming (what you normally do!))
Another person may await their morning train whilst they smoke a cigarette and then drink their coffee. (Asynchronous programming)
What is asynchronous programming?
Asynchronous programming is where a programmer will choose to run some of his code on a separate thread from the main thread of execution and then notify the main thread on it's completion.
What does the async keyword actually do?
Prefixing the async keyword to a method name like
async void DoSomething(){ . . .
allows the programmer to use the await keyword when calling asynchronous tasks. That's all it does.
Why is this important?
In a lot of software systems the main thread is reserved for operations specifically relating to the User Interface. If I am running a very complex recursive algorithm that takes 5 seconds to complete on my computer, but I am running this on the Main Thread (UI thread) When the user tries to click on anything on my application, it will appear to be frozen as my main thread has queued and is currently processing far too many operations. As a result the main thread cannot process the mouse click to run the method from the button click.
When do you use Async and Await?
Use the asynchronous keywords ideally when you are doing anything that doesn't involve the user interface.
So lets say you're writing a program that allows the user to sketch on their mobile phone but every 5 seconds it is going to be checking the weather on the internet.
We should be awaiting the call the polling calls every 5 seconds to the network to get the weather as the user of the application needs to keep interacting with the mobile touch screen to draw pretty pictures.
How do you use Async and Await
Following on from the example above, here is some pseudo code of how to write it:
//ASYNCHRONOUS
//this is called using the await keyword every 5 seconds from a polling timer or something.
async Task CheckWeather()
{
var weather = await GetWeather();
//do something with the weather now you have it
}
async Task GetWeather()
{
var weatherJson = await CallToNetworkAddressToGetWeather();
return deserializeJson(weatherJson);
}
//SYNCHRONOUS
//This method is called whenever the screen is pressed
void ScreenPressed()
{
DrawSketchOnScreen();
}
Additional Notes - Update
I forgot to mention in my original notes that in C# you can only await methods that are wrapped in Tasks. for example you may await this method:
// awaiting this will return a string.
// calling this without await (synchronously) will result in a Task object.
async Task FetchHelloWorld() {..
You cannot await methods that are not tasks like this:
async string FetchHelloWorld() {..
Feel free to review the source code for the Task class here.