Hola, tengo una aplicación que consume un servicio web, utilizo el objeto webclient y hago un pos con el metodo uploaddata, el problema es que cuando el servicio está caido o no hay red se queda esperando mucho tiempo así que necesito ponerle un timeout.

Tengo entendido que el objeto httpwebclient tiene time out o que lo puedo hacer por el mismo objeto webclient pero con el metodo uploaddataasynch pero no le encuentro la vuelta y no hay un ejemplo completo porque una vez que envío los datos necesito recuperar la respuesta y no encuentro como. Me pueden dar una mano?

Acá les copio el codigo que tengo actualmente funcionando:
Código:
Public Function MakeRequest(pBaseUrl As String, pMetodo As String, pToken As String, pJson As String) As MktApiResponse

        Try
            Dim request As New WebClient
            request.Headers.Add("content-type", "application/json")
            request.Headers.Add("Authorization", "Basic " & pToken)
            If Strings.InStrRev(pBaseUrl, "/") = 1 Then
                request.BaseAddress = pBaseUrl
            Else
                request.BaseAddress = pBaseUrl & "/"
            End If

            Dim response As String = Encoding.ASCII.GetString(request.UploadData(pMetodo, Encoding.Default.GetBytes(pJson)))
            Dim js As New JavaScriptSerializer()
            Dim ApiResponse As MktApiResponse = js.Deserialize(Of MktApiResponse)(response)

            Return ApiResponse

        Catch ex As Exception
            Dim BadApiResponse As New MktApiResponse
            BadApiResponse.Message = ex.Message
            BadApiResponse.HasError = True
            BadApiResponse.Code = -1
            Return BadApiResponse
        End Try

    End Function