HttpWebRequest.GetRequestStream()在第二次尝试后暂停(异步)c#
我的环境版本是2.0,我目前使用的是Unity 5.5,c#。 第三次尝试获取HttpWebRequest请求流时,我遇到了一个暂停 我想要实现的是有一个“重试”机制:当我发送请求时,我等待响应,如果超时,我发送另一个请求并刷新超时时间。当我点击MAX_尝试或其中一个请求得到响应(即使是来自超时的请求)时,我停止这个循环 处理此循环的代码如下所示:HttpWebRequest.GetRequestStream()在第二次尝试后暂停(异步)c#,c#,unity3d,stream,httpwebrequest,C#,Unity3d,Stream,Httpwebrequest,我的环境版本是2.0,我目前使用的是Unity 5.5,c#。 第三次尝试获取HttpWebRequest请求流时,我遇到了一个暂停 我想要实现的是有一个“重试”机制:当我发送请求时,我等待响应,如果超时,我发送另一个请求并刷新超时时间。当我点击MAX_尝试或其中一个请求得到响应(即使是来自超时的请求)时,我停止这个循环 处理此循环的代码如下所示: IEnumerator DoRequest() { List<IAsyncResult> results
IEnumerator DoRequest()
{
List<IAsyncResult> results = new List<IAsyncResult>(MAX_ATTEMPTS);
int attemptNumber = 1;
while (attemptNumber <= MAX_ATTEMPTS)
{
IAsyncResult result = null;
try
{
result = SendRequest();
}
catch (Exception e)
{
ProcessException(e);
yield break;
}
if (result != null)
{
results.Add(result);
DateTime timeOutTime = DateTime.UtcNow + TIMEOUT;
yield return null;
while (DateTime.UtcNow < timeOutTime)
{
int completedIndex = -1;
if (IsAnyResultCompleted(results, out completedIndex) == true)
{
ProcessResponse(results[completedIndex]);
yield break;
}
else
{
yield return null;
}
}
}
attemptNumber++;
}
if (results.Count != 0)
{
ProcessResponseFail("Timed out");
}
else
{
ProcessResponseFail("Unable to generate a request");
}
}
“onResponse”是一个缓存委托,它被分配给以下对象:
void OnResponse(IAsyncResult asynchronousResult)
{
try
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
request.EndGetResponse(asynchronousResult);
}
catch (WebException e)
{
string responseStream;
using (var streamReader = new StreamReader(e.Response.GetResponseStream()))
{
responseStream = streamReader.ReadToEnd();
}
Utility.Console.LogError(responseStream);
}
}
我很清楚,并且我也尝试设置ServicePointManager.DefaultConnectionLimit=1000000,但在SendRequest中的两个发送请求GetRequestStream()暂停5秒后,结果总是一样的,我不明白为什么
void OnResponse(IAsyncResult asynchronousResult)
{
try
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
request.EndGetResponse(asynchronousResult);
}
catch (WebException e)
{
string responseStream;
using (var streamReader = new StreamReader(e.Response.GetResponseStream()))
{
responseStream = streamReader.ReadToEnd();
}
Utility.Console.LogError(responseStream);
}
}