KSFramework icon indicating copy to clipboard operation
KSFramework copied to clipboard

想问一下,为什么HttpWebRequest要自己算超时?

Open jerry-zeng opened this issue 4 years ago • 3 comments

HttpWebRequest.Timeout是包含request.GetResponse()和response.GetResponseStream()的,我看你下载那边自己算超时,其实也是这2步的超时时间总和,并不是request.GetResponse()。

所以我有疑问,直接用HttpWebRequest自带的Timeout不行么?

jerry-zeng avatar Mar 28 '20 12:03 jerry-zeng

你是指中KHttpDownloader.StartDownload从170开始代码块吗?

 var MaxTime = TIME_OUT_DEF;
while (!isThreadFinish && !isThreadError)
{
	timeCounter += Time.deltaTime;
	if (timeCounter > MaxTime && !isThreadStart)
	{
		//#if !UNITY_IPHONE  // TODO: 新的异步机制去暂停,Iphone 64不支持
		//                downloadThread.Abort();
		//#endif
		Debug.LogError(string.Format("[KHttpDownloader]下载线程超时!: {0}", fullUrl));
		isThreadError = true;
		break;
	}
	Progress = (downloadSize/(float) totalSize);
	yield return null;
}

zhaoqingqing avatar Apr 11 '20 12:04 zhaoqingqing

对的,就是这个

jerry-zeng avatar Apr 16 '20 04:04 jerry-zeng

另外,我还碰到一个问题,多线程下载,只要超过2个线程同时运行,就必定会有至少一个HttpWebRequest超时或者等待时间很长,我这边是8秒以上,连带后面的一串任务(多线程并行)也等这么久。我用的.net4.x,DefaultConnectionLimit设置很大,httpWebRequest.Proxy也置空了,但是没作用。我不知道其它.net版本会不会影响,反正现在这问题好像无解。如果只用2个线程,问题虽然没了,但是下载速度会慢。

jerry-zeng avatar Apr 16 '20 04:04 jerry-zeng