VB.NET Async, Await Example: Task Start and WaitUse the Async and Wait keywords to run code asynchronously. Review Task, Start and Wait.
Async, Await. In asynchronous programming, many control flows can exist at once. With the Async and Await keywords in VB.NET we have a standard, clear way to program this way.
Threading is supported.
But with Async and Await, we do not need multiple threads. Some actions often are faster when done in an asynchronous way.
Tip: Async and Await help with reading a file with StreamReader or downloading from the network.
Task: We use Task, a generic type, to Start and Wait for an asynchronous action (a task) to complete.
Let us begin.
This example is somewhat complex. In Main we create a new Task—we must use AddressOf in VB.NET to reference a function for the Task.AddressOf
Start, wait: In Main we invoke Start and Wait on the task. The program does not exit until ProcessDataAsync finishes.
Async: This keyword is used at the function level. The ProcessDataAsync Sub is Async. It contains a usage of Await.
Await: This keyword, found in an Async Sub, causes the method to pause until the task (an argument to Await) is finished.Sub
VB.NET program that uses Async, Await, Task
' Create a Task with AddressOf.
Dim task = New Task(AddressOf ProcessDataAsync)
' Start and wait for task to end.
Async Sub ProcessDataAsync()
' Create a task Of Integer.
' ... Use HandleFileAsync method with a large file.
Dim task As Task(Of Integer) = HandleFileAsync("C:\enable1.txt")
' This statement runs while HandleFileAsync executes.
Console.WriteLine("Please wait, processing")
' Use await to wait for task to complete.
Dim result As Integer = Await task
Console.WriteLine("Count: " + result.ToString())
Async Function HandleFileAsync(ByVal file As String) As Task(Of Integer)
' Open the file.
Dim count As Integer = 0
Using reader As StreamReader = New StreamReader(file)
Dim value As String = Await reader.ReadToEndAsync()
count += value.Length
' Do a slow computation on the file.
For i = 0 To 10000 Step 1
Dim x = value.GetHashCode()
If x = 0 Then
count -= 1
Please wait, processing
Please wait, processing
Some notes, HandleFileAsync.
Please look at HandleFileAsync. This uses a StreamReader to open and read (in an asynchronous way) the specified file.StreamReader
Note: The For-loop in HandleFileAsync is meant to take a long time. This demonstrates the benefit of Async and Await.For Each, For
Some notes, task. When the Await keyword is encountered, control flow pauses until its Task finishes execution. So the "count" returned from HandleFileAsync is always ready to be printed.
What is the benefit to Async and Await in the example program? The message "Please wait, processing" is displayed while the asynchronous task executes.
So: Two control flows exist at once. In a real program, another important action could be taken instead of just printing a message.
Tip: For the file "enable1.txt," you can substitute any large data file. This is a list of words that is about 2 megabytes.
In the .NET Framework many types like StreamReader and HttpClient have asynchronous features. With Async and Await we exploit these features to improve program responsiveness.HttpClient
© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to firstname.lastname@example.org.