3

私の目標は、最短時間で最大 6000 の URL から回答を得ることです。多少の遅延が発生し始めるまで、非常にうまく機能していました (5200 の LAN アドレスで 12 秒)。

ThreadPool.RegisterWaitForSingleObject私のコードは、タイムアウト処理のために最大 20 個の同時 HttpWebRequest.BeginGetResponse を使用します。

ただし、リクエストの一部 (5,000 分の 4 まで) は、2 番目のパラメーター (timedOut) が true の TimeoutCallback 関数に到達せず、BeginGetResponseCallback 関数に到達してから WebException が発生するまで、5 分間の貴重な時間を無駄にします。例外は「操作が制限時間に達しました」のようなものですが、例外メッセージがポルトガル語(私の母国語)であるため、Googleで検索できませんでした。

この制限時間を、たとえば 20 秒に短縮できないかと考えています。誰でも方法を知っていますか?私はすでに試しました:

<system.web>
    <httpRuntime executionTimeout="20"/>
</system.web>

しかし、コンソール アプリケーションとして実行しているため、ASP.NET 構成が機能しません。そして私も試しました:

myHttpWebRequest.Timeout = 20*1000;

ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), AsyncState, 20*1000, true);

成功せずに。手伝って頂けますか?

更新 私が言おうとしているのは、非同期 HTTP 要求には 4 つの可能な結果があるということです。

  1. コールバック関数に到達しない -> タイムアウト コールバック関数
  2. リーチして正常に応答する
  3. 到達して例外を発生させる
  4. コールバック関数内で「時間制限」Web 例外が発生するまで、正確に 5 分遅らせる

4 つ目の可能性は、アプリケーションの遅延であり、その遅延を短縮する方法がわかりません。

更新GetResponseStreamの代わりに メソッドGetResponseがタイムアウトの原因である可能性はありますか?

4

2 に答える 2

4

リクエスト オブジェクトの ReadWriteTimeout プロパティを設定する必要があるようです。

http://blogs.msdn.com/buckh/archive/2005/02/01/365127.aspx

于 2008-12-23T20:40:17.007 に答える
1

.Timeout = 接続の確立に費やされた時間 (ルックアップ時間は含まない) .ReadWriteTimeout = 接続が確立された後にデータの読み取りまたは書き込みに費やされた時間

于 2013-11-26T09:59:44.277 に答える