Thread VB.Net Tutorial

Imports System
    Imports System.Threading
    Imports System.Runtime.InteropServices 
    Public Class AsyncDemo 
        Public Function TestMethod(ByVal callDuration As Integer, ByRef threadId As Integer) As String
            Console.WriteLine("Test method begins.")
            Thread.Sleep(callDuration)
            threadId = Thread.CurrentThread.ManagedThreadId()
            return String.Format("My call time was {0}.", callDuration.ToString())
        End Function
    End Class
    Public Delegate Function AsyncMethodCaller(ByVal callDuration As Integer, ByRef threadId As Integer) As String
    Public Class AsyncMain 
        Shared Sub Main() 
            Dim threadId As Integer
            Dim ad As New AsyncDemo()
            Dim caller As New AsyncMethodCaller(AddressOf ad.TestMethod)
            Dim result As IAsyncResult = caller.BeginInvoke(3000,threadId, Nothing, Nothing)
            While result.IsCompleted = False
                Thread.Sleep(50)
                Console.WriteLine(".")
            End While
            Dim returnValue As String = caller.EndInvoke(threadId, result)
            Console.WriteLine(threadId)
            Console.WriteLine(returnValue)
        End Sub
    End Class