2012-01-20 5 views
1

をmutilthreading ...ここにコードスニペットです。Windowsサービス&Iが定期的に実行されるWindowsサービスを、持っている

public void start() 
{ 
    try 
    { 
     Process_Requests(); 
     Process_Exports(); 
    } 
    catch (Exception ex) 
    { 
     ErrorLogs.SaveError(ex, ""); 
    } 
} 

実行が1つのスレッドで実行されると、どのように実行されますか?例えば、最初のメソッドは実行に時間がかかり、次に2番目のメソッドは何ですか?

Process_request()Preocess_export()メソッドに電話します。各メソッドは複数のデータベースに接続する必要があります。このような状況では、接続ごとに新しいスレッドを作成し、自分の仕事をする必要がありますか...わかりません。

public void start() 
{ 
    try 
    { 
     #region 
     sqlConObjects = new List<SqlConnection>(); 

     // Here i am getting multiple connection strings 
     List<string> conStrings = GetConnectionStrings(); 
     foreach (string strCon in conStrings) 
     { 
      SqlConnection sqlCon = new SqlConnection(strCon); 
      sqlConObjects.Add(sqlCon); 
     } 

     foreach (SqlConnection sqlCon in sqlConObjects) 
     { 
      //sqlCon.Open(); 
      Thread t = new Thread(ProcessRequest); 
      t.Start((object)sqlCon); 

      Thread t1=new Thread(ProcessExports); 
      t1.Start((object)sqlCon); 
     } 
     #endregion 
    } 
    catch (Exception ex) 
    { 
     ErrorLogs.SaveError(ex, ""); 
    } 
} 

誰でもこのことを説明してください...スレッドは作成されているか必要はありませんか?接続オブジェクトごとにスレッドを作成していない場合、どのように実行する必要がありますか。

答えて

0

タイマーはThreadPoolで動作します MSDN タイマーによって実行されるコールバックメソッドは、ThreadPoolスレッドで呼び出されるため、再入可能にする必要があります。タイマー間隔がコールバックの実行に必要な時間よりも短い場合、またはすべてのスレッドプールスレッドが使用中で、コールバックが複数回キューに入れられている場合は、2つのスレッドプールスレッドで同時にコールバックを実行できます。

また、あなたのコードでは、タイマーオブジェクトへの参照を保持せず、それが収集されます。

私の場合、ThreadPoolを使用してください。多くのスレッドを作成するのは悪い習慣です

関連する問題