ADO Database VB.Net

Imports System
Imports System.Data
Imports System.Threading
Imports System.Data.SqlClient
    Public Class MainClass
        
        Public Shared Sub CallBackHandler(ByVal result As IAsyncResult)
            Using cmd As SqlCommand = TryCast(result.AsyncState, SqlCommand)
                Using reader As SqlDataReader = cmd.EndExecuteReader(result)
                    SyncLock Console.Out
                        While reader.Read
                            Console.WriteLine("{0}   {1}   {2}   {3}", reader("ComponentID"), reader("ComponentDesc"), reader("TotalQuantity"), reader("ListPrice"))
                        End While
                    End SyncLock
                End Using
            End Using
        End Sub
        Public Shared Sub Main()
            Using con As New SqlConnection
                con.ConnectionString = "Data Source=.\sqlexpress;Database=AdventureWorks;Integrated Security=SSPI;Asynchronous Processing=true;"
                Using cmd As SqlCommand = con.CreateCommand
                    cmd.CommandType = CommandType.StoredProcedure
                    cmd.CommandText = "uspGetBillingInfo"
                    cmd.Parameters.Add("@StartProductID", SqlDbType.Int).Value = 771
                    cmd.Parameters.Add("@CheckDate", SqlDbType.DateTime).Value = DateTime.Parse("07/10/2000")
                    con.Open()
                    cmd.BeginExecuteReader(AddressOf CallBackHandler, cmd)
                End Using
                con.Close()
            End Using
        End Sub
    End Class