2012-03-13 6 views
0

У меня есть следующий рабочий код, чтобы получить поток из 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.

Любые идеи, почему?

+1

Не знаете, в чем проблема, но ограничение на ОС представляется вполне разумным! Помните: это мобильное устройство с ограниченной батареей, памятью, пропускной способностью и (как правило) оплатой интернет-плана за килограмм! –

+0

Я предполагаю, что вы используете Visual Studio. Если это так, вы можете видеть, какие потоки выполняются, приостанавливая приложение и открывая окна потоков. (Я не на своем ПК с ОС Windows, поэтому не могу сказать вам точное имя и как добраться до этого окна). Раньше я занимался проблемами потоковой передачи, и из того, что помню, у вас есть 1 графический интерфейс/основной поток и 25 фоновых потоков. Похоже, у вас должно быть достаточно, чтобы выполнить эту задачу. Проверьте, сколько потоков в настоящее время работает в вашем приложении, и сообщите нам, если вы используете их все. В противном случае это еще одна проблема. – ajmccall

ответ

2

Вы получаете ограничение на количество одновременных веб-запросов (что равно 6).

Попробуйте закрыть поток, когда вы закончите с ним, или ошеломляете ваши запросы, чтобы вы не пытались сделать слишком много сразу.

+0

Я закрывал и удалял поток и закрывал httpResponse. Я просто забыл прервать WebRequest. благодаря – dcarneiro

Смежные вопросы