C# 设置StackyClient超时

C# 设置StackyClient超时,c#,timeout,httpwebrequest,stacky,C#,Timeout,Httpwebrequest,Stacky,我使用这个库来循环堆栈溢出中的最新问题。一般来说,这是有效的: StackyClient client = new StackyClient("1.1", "", Sites.MetaStackOverflow, new UrlClient(), new JsonProtocol()); var o = new QuestionOptions(); ... IPagedList<Question> l = null; while (!stop) { l = client.

我使用这个库来循环堆栈溢出中的最新问题。一般来说,这是有效的:

StackyClient client = new StackyClient("1.1", "", Sites.MetaStackOverflow, new UrlClient(), new JsonProtocol());
var o = new QuestionOptions();
...
IPagedList<Question> l = null;
while (!stop) {   
   l = client.GetQuestions(o);
   var newQuestions = (from Question q in l                      
                       orderby q.Id descending
                       select q).ToList();
   ...
}
StackyClient client=new StackyClient(“1.1”,Sites.MetaStackOverflow,new UrlClient(),new JsonProtocol());
var o=新问题选项();
...
IPagedList l=null;
当(!停止){
l=客户。获取问题(o);
var newQuestions=(来自l中的问题q
orderby q.Id递减
选择q.ToList();
...
}
但在某种程度上,这似乎失败了。可能是由于网络连接问题,或者我不知道是什么原因。程序挂起在
client.GetQuestions(o)


我想检测该问题并重新连接我考虑以某种方式设置超时以防止程序挂起。如何做到这一点?

这里有两个可能的答案:

  • 你确定这是挂着的吗?您是否在调试器下运行它并确保它不会引发未捕获的异常?您是否向ProcessExplorer和/或Fiddler检查请求和套接字是否仍然打开?在我看来,更可能的情况是套接字正在关闭,或者您遇到了异常,并且没有被捕获
  • 如果在GetQuestions上确认这是挂起的,那么对代码的检查表明您必须要求Stacky的作者实现此功能,或者您必须自己实现它。。。据我所知,该功能在今天并不存在
  • 在Stacky的UrlClient.cs中,对HttpWebRequest.GetResponse有一个阻塞调用,对响应流上的ReadToEnd有一个阻塞调用。没有为这两个调用或HttpWebRequest对象本身设置超时:

    此外,我在connectionManagement设置中没有看到任何允许设置响应超时和读取HttpWebRequest响应流的内容:

    堆栈UrlClient代码正在重新抛出404和407之外的WebException(需要代理身份验证),因此如果您从StackOverflow获得408(服务器超时),它将抛出Stacky GetQuestions调用,这就是为什么我怀疑您可能看到的是未捕获的异常,而不是挂起

    在Chrome中浏览问题时,我会定期从StackOverflow中看到408,因此这可能发生在您的程序上,您只需要捕获异常并在延迟后重试


    希望这有帮助-哈罗德

    你是对的。我没有正确捕获异常。现在就做,它会起作用。