Visual Basic Improvements in Visual Studio 11: Listing 3.
An incorrect pattern for consuming Async functions
Private Sub IncorrectCallerAsync()
'Illustrates a usage pattern for Async and Await that will fail
'"Method completed:" displays 1-2 seconds before "HTML received:" message
wb1.DocumentText = ""
Dim HTMLtask = GetHTMLAsync(msdnURL)
If (HTMLtask.Status = TaskStatus.RanToCompletion) Then
'This never executes since task returns TaskStatus.WaitingForActivation
Dim HTML As String = HTMLtask.Result
wb1.Document.Write(HTML)
lblElapsedSynch.Text = "Page 1 Updated: " & Now.TimeOfDay.ToString
End If
lblElapsedSynch.Text = "Method completed: " & Now.TimeOfDay.ToString
End Sub
Private Async Function GetHTMLAsync(webPageURL As String) As Task(Of String)
Dim HTMLcontent = String.Empty
Try
Dim response = Await New System.Net.Http.HttpClient().GetAsync(New System.Uri(webPageURL))
HTMLcontent = response.Content.ReadAsString
lblElapsedAsync.Text = "HTML received: " & Now.TimeOfDay.ToString
Catch ex As Exception
Dim msg = "Exception: {0}" & vbCrLf & vbCrLf & "{1}"
MessageBox.Show(String.Format(msg, ex.Message, ex.InnerException.Message))
End Try
Return HTMLcontent
End Function
About the Author
Joe Kunk is a Microsoft MVP in Visual Basic, three-time president of the Greater Lansing User Group for .NET, and developer for Dart Container Corporation of Mason, Michigan. He's been developing software for over 30 years and has worked in the education, government, financial and manufacturing industries. Kunk's co-authored the book "Professional DevExpress ASP.NET Controls" (Wrox Programmer to Programmer, 2009). He can be reached via email at [email protected].