Do you want to use async/await on c# ? (yes, as in javascript) Okey, I'll show you how to do that in an easy way π
First of all
You should have your project on c# (.net core/framework) created.
Let's start
There are a few concepts that you need to know, so this tutorial is divided into several small sections:
Task class π§ your best friend
The task class on c# represents an async operation, this operation can be a simple method wich will be called without interrupt the current process thread, it'll run on another Thread, but you don't have to do any complex syntax, just call a method.
We can see, 3 elements:
- The Task class constructor and variable task1
- A lambda expression (is like an arrow function): that represent the operation wich we want to run (lambda expression in c#).
- Start method call: run the operation asynchronously
Output:
Hello! this will run async
A more detailed example π
The task class is a powerful tool of c#, but maybe you got confused on how and when it is running.
Well this is a more detailed example, we have 2 tasks to do:
As you can see, the 2 tasks are example operations wich use Thread.Sleep(miliseconds)
function to stop temporaly the task thread (to simulate a real operation).
So, let's Start
these tasks and check it's behaviour:
Output
Starting all tasks
Starting task 1
Starting task 2
------------------------------------
All tasks have finished, or not?
Task 1 done
Task 2 done
As we can see, the 2 tasks have been called asynchronously, and it's output is on the bottom.
But what happend with the All tasks have finished, or not?
line, it should appear after tasks have been done, how can we do that? It's very easy, and we'll see it on the next section
Async/Await πͺ
Async/Await in c# is simple. You just have to put the
async
word in a method, example:public void DoSomething()
to public async void DoSomething()
.
Now, this method is able to "await" a Task
until it finishes its work, using the await
word before the task name π€―
So, we can modify the example of the previous section to make it an async method:
As we can see, the code is inside of an async method called Main
. Also, we add await task
, this will allow us to control the code flow.
Now, the task 1 will start with task1.Start()
normally, but the await task1
statement won't allow the code execution to continue until the task 1 has finished. The same behaviour for the task 2.
The output:
Starting all tasks
Hello! this will run async
Starting task 1
Task 1 done
Starting task 2
Task 2 done
------------------------------------
All tasks have finished, or not?
We have fixed the problems we saw in the previous section.
- The line
All tasks have finished, or not?
is at the end - Also, both tasks run as a synchronous operation, but with the advantages of Async/Await features πͺ
The Async/Await and Task class are powerful tools to make concurrent, efficient and legible code without much effort π.
There are more useful uses of these features, you can leave me a comment if you want more tutorials about C# or something else π
Top comments (1)
More info from official documentation: