1

我们需要调用第 3 方以使用 REST 检索值,但是如果我们在 10 毫秒内没有收到响应,我想使用默认值并继续处理。

我倾向于使用异步 WebRequest 来做到这一点,但我想知道使用同步请求是否有技巧。

有什么建议吗?

4

2 回答 2

2

如果您正在执行请求并等待它返回,我会说保持同步 - 如果您不打算做任何事情或在等待时保持响应,则没有理由执行异步请求。

对于同步呼叫:

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() - 您需要自己检查超时,没有内置方法可以强制执行硬超时。

于 2008-09-25T18:17:32.857 回答
0

您可以将您对第 3 方的调用封装在 WebService 中。然后,您可以从您的应用程序同步调用此 WebService - Web 服务引用有一个简单的超时属性,您可以将其设置为 10 秒或其他任何值。

在超时期限过后,您从 WebService 获取第 3 方数据的调用将引发 WebException。您抓住它并改用默认值。

编辑:菲利普上面的反应更好。里夫。

于 2008-09-25T18:41:30.363 回答