2011-09-09 11 views
0

データベース接続ができないときはいつでも再試行する必要のあるコードがあります(たとえば、ログインごとに20回)。ウェブサイトには何十人ものユーザーがいますが、これを処理するにはどうすればよいでしょうか?私はカウンタを使用することを考えていましたが、同時に複数のユーザーが同時にログオンするため、おそらくいくつかのスレッドが必要になるかもしれません。データベース接続の問題を処理する

EDIT:

私はThreadオブジェクトをインスタンス化しています行にエラー「期待されるメソッド名」を取得します。ここに私のコードは次のとおりです。

private static List<Field.Info> FromDatabase(this Int32 _campId) 
    { 
     List<Field.Info> lstFields = new List<Field.Info>(); 

     Field.List.Response response = new Field.List.Ticket 
     { 
      campId = _campId 
     }.Commit(); 

     if (response.status == Field.List.Status.success) 
     { 
      lstFields = response.fields; 
      lock (campIdLock) 
      { 
       loadedCampIds.Add(_campId); 
      } 
     } 

     if (response.status == Field.List.Status.retry) 
     { 
      Thread th1 = new Thread(new ThreadStart(FromDatabase(_campId))); 

      FromDatabase(_campId); 
     } 

     return lstFields; 
    } 
+0

を使用するには、ユーザー固有のカウンタではないソリューションですか?並列ログインを管理する場合は、通常、多くのスレッドが必要です。状態を一種の状態マシンに保つことができます。 – Vlad

答えて

0

私のアプローチは、カウンタをインクリメントし、カウンタ< = 20 が、私は現在のスレッドをブロックし、接続結果を待つならば、非同期Methodeのを呼び出すイベント、だろう。

するためのスレッドセーフなインクリメントあなたのカウンターは

Interlocked.Increment(ref int counter); 
+0

これを行う方法のコード例を教えてください。私は前にスレッドを実行していないし、これでどこから開始するのか分からない。 – user517406

+0

この[on msdn](http://msdn.microsoft.com/de-de/library/dd78zt0c.aspx)の例があります。 –

関連する問題