我正在处理非常烦人的问题,我找不到任何解决方案。
我正在调用 WebRequest Connection,在 Unity C# 下工作;
IAsyncResult startingTheCall = webRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), parameters);
它向运行在 Windows 上的服务器发送调用;一切正常。但是,如果服务器未关闭,则连接将等待响应永恒。所以解决这个问题,我添加超时:
ThreadPool.RegisterWaitForSingleObject(startingTheCall.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallbackOfFirstStream), parameters, 10000, true);
超时也很好用;问题是,如果我触发超时(通过关闭服务器),然后再次启用服务器,BeginGetRequestStream 无论如何都不会到达服务器,直到我重新启动应用程序。
我想,也许在失败时,我没有正确清理连接。所以我确实在超时内设置了这个清洁程序:
ArrayList unbox = (ArrayList)state;
HttpWebRequest request = (HttpWebRequest)unbox[1];
IAsyncResult asynchronousResult = (IAsyncResult)unbox[6];
Stream postStream = request.EndGetRequestStream(asynchronousResult);
postStream.Close();
request.Abort();
我中止请求,关闭流。尽管如此,在第一次失败之后,服务器将永远不会发送响应或获取流消息,直到我重新启动应用程序。就像它被完全封锁一样。
有人有过这种行为吗?