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].

comments powered by Disqus

Featured

  • VS Code Java Team Improves 'Getting Started' Experience

    Microsoft's dev team responsible for the Java on Visual Studio Code extensions released a new update that eases the "getting started" experience, addressing feedback from new users who want an easier onramp.

  • Data Prep for Machine Learning: Encoding

    Dr. James McCaffrey of Microsoft Research uses a full code program and screenshots to explain how to programmatically encode categorical data for use with a machine learning prediction model such as a neural network classification or regression system.

  • Surface Duo Debut Presents Dual-Screen Dev Challenges

    Microsoft officially launched its new dual-screen Android device, Surface Duo, presenting new challenges -- and opportunities -- for developers to leverage the new form factor.

  • What's New in Blazor Tooling Updates

    Here's a quick look at what four major third-party Blazor tooling vendors have offered lately for Microsoft's red-hot project that allows for web development with C# instead of JavaScript.

  • Xamarin.Forms 4.8 Ships with Experimental Drag & Drop, Gradients/Brushes

    Microsoft shipped Xamarin.Forms 4.8 with two new experimental features leading the improvements to the C#-based cross-platform UI toolkit: gradients/brushes for "painting" in an app and drag-and-drop functionality within an app.

.NET Insight

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.

Upcoming Events