Public Class TwoPartRequest Private req1, req2 As HttpWebRequest Private res1, res2 As IAsyncResult Private run1, run2 As Integer Private coolResult As CoolObject Public Sub New(ByVal url As String) req1 = WebRequest.Create(url) req1 = req1.BeginGetResponse(AddressOf Part1Complete, Nothing) End Sub Private Sub Part1Complete(ByVal ar As IAsyncResult) If System.Threading.Interlocked.Increment(run1) = 1 Then Using resp As HttpWebResponse = req1.EndGetResponse(ar) Dim url As String = FigureOutNextUrlUsingResponse(resp) req2 = WebRequest.Create(url) res1 = req2.BeginGetResponse(AddressOf Part2Complete, Nothing) End Using End If End Sub Private Sub Part2Complete(ByVal ar As IAsyncResult) If System.Threading.Interlocked.Increment(run2) = 1 Then Using resp As HttpWebResponse = req2.EndGetResponse(ar) coolResult = BuildResultUsingResponse(resp) End Using End If End Sub Public Function Result() As CoolObject Part1Complete(res1) Part2Complete(res2) Return coolResult End Function End Class