Я исправляю ошибку: приложение будет висеть в процессе загрузки в течение 5 минут при потере сетевого подключения. То, что мне нужно сделать, - уменьшить время зависания до 20 секунд.Как реализовать свойство readtimeout времени
журнал сниппет:
Severe 2016-01-27 , 11:03:14
在 HttpsDownload.doDownloadByHttps(FileDownloadInfo fileInfo, downloadingDelegate downDelegate)
Message: Init method:GET
Info 2016-01-27 , 11:08:29
在 HttpsDownload.writeToFile(FileDownloadInfo fileInfo, Stream stream, downloadingDelegate downDelegate, Boolean Clear)
Message: Exception while reading from the response stream
Exception:
Message: time out
Type: System.Net.WebException
在 System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
在 HttpsDownload.writeToFile(FileDownloadInfo fileInfo, Stream stream, downloadingDelegate downDelegate, Boolean Clear)
фрагмент кода:
private void doDownloadByHttps(FileDownloadInfo fileInfo, downloadingDelegate downDelegate)
{
//code
webResponse = (HttpWebResponse)webRequest.GetResponse();
responseStream = webResponse.GetResponseStream();
writeToFile(fileInfo, responseStream, downDelegate, bClear);
}
private void writeToFile(FileDownloadInfo fileInfo, Stream stream, downloadingDelegate downDelegate, bool Clear)
{
int count = stream.Read(readBuffer, 0, BlockSize);
while (count > 0)
{
//code
count = stream.Read(readBuffer, 0, BlockSize);
}
}
Я считаю, что тайм-аут происходит в stream.Read
в соответствии с бревна. Поэтому самый простой способ сделать трюк должен быть stream.ReadTimeout = 20000
, но, очевидно, я не могу установить свойство ReadTimeout
. Другой способ, который может думать о том, чтобы написать класс переопределения ReadTimeOut как:
public class MyStream : Stream {
//code
public override int ReadTimeout { get; set; }
//code
}
Но это не является предпочтительным. Любой лучший способ исправить ошибку?
Черт человек, я должен просто сказать «работает как шарм»: =) –
@ little.ming маркировка мой ответ в качестве ответа достаточно :) – Andrew