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;
  }
}


ありがとう。

4

1 に答える 1

1

私が理解していることから、子スレッドがタイムアウトした場合にファイルにログを記録する方法を尋ねていますか?

もしそうなら、応答を受け取る前にタイムアウト制限に達すると、GetResponse()メソッドはスローすると思います。WebExceptionそのため、呼び出しを行う行を try-catch ステートメントで囲むと、GetResponse()情報をファイルに記録できるようになります。

例:

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

GetResponse()は抽象的であるため、実際WebExceptionには のFileWebRequestまたはHttpWebRequest実装のいずれかによってスローされますGetResponse()

于 2013-04-03T11:02:33.130 に答える