2013-04-03 5 views
0

Детский поток ожидает ответа от веб-сервера и также имеет значение тайм-аута.
Если значение тайм-аута наступит первым, прежде чем получить ответ от веб-сервера, он будет продолжать запрашивать исключения таймаута и прерывания потока.
Как мы справляемся с этим и входим в текстовый файл ....?
Parent ThreadОбработка потока прерываний в потоках ....?

public void Save() 
{ 
    List<Job> Jobs = PickJobs(); 

    int workerThreads = 0,compThreads = 0; 
    ThreadPool.GetMinThreads(workerThreads, compThreads); 

    int requiredThreads = 15; 
    ThreadPool.SetMaxThreads(requiredThreads, compThreads); 

    WaitCallback waitCallBack = default(WaitCallback); 
    ManualResetEvent mEvent = default(ManualResetEvent); 

foreach (Job _job in Jobs) 
    { 
    waitCallBack = new WaitCallback(CallBackFunc); 
    mEvent = new ManualResetEvent(false); 
    events.Add(mEvent); 
    ThreadPool.QueueUserWorkItem(waitCallBack, new UrlData(_job, mEvent, HttpContext.Current)); 
    } 
    WaitHandle.WaitAll(events.ToArray(), 300000);//05 Minutes 
} 

дочерних потоков

private void CallBackFunc(object obj) 
{ 
    UrlData msgObj = (UrlData)obj; 
    WebRequest lWebRequest = WebRequest.Create(psUrl); 
    lWebRequest.Timeout = 60000; 
    WebResponse lWebResponse = lWebRequest.GetResponse; 

    msgObj.FinishEvent.Set(); 
} 

Объект для связи между потоками

public class UrlData 
{ 
public Job job; 
public ManualResetEvent FinishEvent; 
public HttpContext HttpContextRef; 

public UrlData(Job pJob, ManualResetEvent pEvent, HttpContext pContext) 
    { 
     job= pJob; 
     FinishEvent = pEvent; 
     HttpContextRef = pContext; 
    } 
} 


Благодарности.

ответ

1

Насколько я понимаю, вы спрашиваете, как регистрироваться в файле, если ваш дочерний поток отключается?

Если это так, я считаю, что метод GetResponse() выбрасывает WebException, если ограничение времени превышено до получения ответа. Поэтому, окружая линию, в которой вы делаете вызов GetResponse() с помощью инструкции try-catch, вы должны регистрировать информацию в файле.

Пример:

try { 
    WebResponse lWebResponse = lWebRequest.GetResponse; 
} catch (WebException ex) { 
    // Write to file code in here 
} 

В GetResponse() это абстрагировать WebException фактически брошен либо на FileWebRequest или HttpWebRequest реализаций GetResponse().

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