У меня есть следующий рабочий код, чтобы получить поток из URL:Я нахожу ограничение ниток?
private Stream GetDownloadStream(string url)
{
Stream stream = null;
AutoResetEvent downloadCompleted = new AutoResetEvent(false);
httpRequest = (HttpWebRequest)WebRequest.Create(url);
httpRequest.AllowReadStreamBuffering = false;
httpRequest.BeginGetResponse(
result =>
{
try
{
httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(result);
stream = httpResponse.GetResponseStream();
}
catch (WebException)
{
downloadCompleted.Set();
Abort();
}
finally
{
downloadCompleted.Set();
}
},
null);
bool completed = downloadCompleted.WaitOne(15 * 1000);
if (completed) {
return stream;
}
return null;
}
Это не имеет значения потоков я выбираю играть. Он всегда возвращает поток для первых 6 запросов и возвращает null для семи запросов.
Я уже пытался увеличить таймаут до 30 секунд, но по седьмому запросу он не будет вводить обратный вызов httpRequest.BeginGetResponse
.
Любые идеи, почему?
Не знаете, в чем проблема, но ограничение на ОС представляется вполне разумным! Помните: это мобильное устройство с ограниченной батареей, памятью, пропускной способностью и (как правило) оплатой интернет-плана за килограмм! –
Я предполагаю, что вы используете Visual Studio. Если это так, вы можете видеть, какие потоки выполняются, приостанавливая приложение и открывая окна потоков. (Я не на своем ПК с ОС Windows, поэтому не могу сказать вам точное имя и как добраться до этого окна). Раньше я занимался проблемами потоковой передачи, и из того, что помню, у вас есть 1 графический интерфейс/основной поток и 25 фоновых потоков. Похоже, у вас должно быть достаточно, чтобы выполнить эту задачу. Проверьте, сколько потоков в настоящее время работает в вашем приложении, и сообщите нам, если вы используете их все. В противном случае это еще одна проблема. – ajmccall