RESTを使用して値を取得するには、サードパーティに呼び出す必要がありますが、10ミリ秒以内に応答がない場合は、デフォルト値を使用して処理を続行します。
私はこれに非同期WebRequestdoを使用することに傾倒していますが、同期要求を使用してそれを行うためのトリックがあるかどうか疑問に思いました。
何かアドバイス?
RESTを使用して値を取得するには、サードパーティに呼び出す必要がありますが、10ミリ秒以内に応答がない場合は、デフォルト値を使用して処理を続行します。
私はこれに非同期WebRequestdoを使用することに傾倒していますが、同期要求を使用してそれを行うためのトリックがあるかどうか疑問に思いました。
何かアドバイス?
リクエストを実行していて、それが返されるのを待っている場合は、同期を維持してください。待機中に何もしないか、応答を維持するつもりがない場合は、非同期リクエストを実行する理由はありません。
同期呼び出しの場合:
WebRequest request = WebRequest.Create("http://something.somewhere/url");
WebResponse response = null;
request.Timeout = 10000; // 10 second timeout
try
{
response = request.GetResponse();
}
catch(WebException e)
{
if( e.Status == WebExceptionStatus.Timeout)
{
//something
}
}
非同期を行う場合:
リクエスト オブジェクトで Abort() を呼び出す必要があります。タイムアウトを自分で確認する必要があります。ハード タイムアウトを強制する組み込みの方法はありません。
サードパーティへの呼び出しを WebService にカプセル化できます。次に、この WebService をアプリケーションから同期的に呼び出すことができます。Web サービス参照には、10 秒などに設定できる単純なタイムアウト プロパティがあります。
WebService からサード パーティのデータを取得するための呼び出しは、タイムアウト期間が経過した後に WebException をスローします。それをキャッチして、代わりにデフォルト値を使用します。
編集: 上記の Philip の応答の方が優れています。RIF。