2

Web ページの URL が本物であることを検証し、True または False を返す簡単なメソッドを作成しています。

.NET 4.5 で新しい async await 関数を使用すると、これは非常に簡単に思えますが、非同期のタイムアウトを設定するにはどうすればよいですか?

''' <summary>
''' Returns True if a webpage is valid.
''' </summary>
''' <param name="url">Url of the webpage.</param>
Private Async Function VailiateWebpageAsync(url As String) As Task(Of Boolean)       
    Dim httpRequest As HttpWebRequest
    Dim httpResponse As HttpWebResponse

    httpRequest = CType(WebRequest.Create(url), HttpWebRequest)
    httpRequest.Method = "HEAD" 'same as GET but does not return message body in the response

    Try
        httpResponse = CType(Await httpRequest.GetResponseAsync, HttpWebResponse)
    Catch ex As Exception
        httpResponse = Nothing
    End Try

    If Not IsNothing(httpResponse) Then
        If httpResponse.StatusCode = HttpStatusCode.OK Then
            httpResponse.Dispose()
            Return True
        End If
    End If

    If Not IsNothing(httpResponse) Then httpResponse.Dispose()
    Return False
End Function
4

4 に答える 4

0

を介して自分でタイムアウトを実装する必要がありますTask.Delay

非同期呼び出しの場合、HttpWebRequest.Timeoutプロパティは無視されることに注意してください。それはMSDNで明確に述べられています:

==================================

Timeout プロパティは、BeginGetResponse または BeginGetRequestStream メソッドで作成された非同期要求には影響しません。

非同期要求の場合、クライアント アプリケーションは独自のタイムアウト メカニズムを実装します。BeginGetResponse メソッドの例を参照してください。

==================================

于 2013-11-05T18:48:38.527 に答える