2013-04-03 163 views
0

子线程正在等待来自web服务器的响应,并且也具有超时值。
如果在获取来自Web服务器的响应之前超时值先到达,它将继续请求超时和线程中止异常。
我们如何处理这个问题并登录到文本文件中。
父线程处理线程中的线程中止异常....?

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如果达到超时限制它收到响应之前。因此,使用try-catch语句调用GetResponse()调用的行应该允许您将信息记录到文件中。

实施例:

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

作为GetResponse()是抽象的WebException实际上是由任一的GetResponse()FileWebRequestHttpWebRequest实现抛出。