C#の私のアプリはこのように動作しています。構成ファイル(スレッドの動的作成)の値と同じ数のスレッドを開始します。すべてのスレッドが実行しているのは、DBに移動し、ストアドプロシージャを呼び出すことです(60のスレッドがある場合、デッドロックが発生します)。その後、すべてのスレッドがWebサービスを呼び出し、行の更新に戻ります。こんな感じです
List<Message> messages =getMessages(ThreadNO);//goes to DB
if (messages != null)
{
foreach (Message bm in messages)
{
if (bm.Status)
{
try
{
bm.send();//calls Web service
}
catch (Exception ex)
{
LOG.Logger.Error(ex.ToString());
}
updateStatus(bm);//goes back to DB
}
else
{
if (bm.subscribe())
updateSubscription(bm);//calls WS
else
updateUnsuccessfulSubscription(bm);//calls WS
}
}
}
DBの安価な方法でこれを実行したいと思います。DBに一度だけ行き、その後、オブジェクトメッセージからサブリストを作成したいと思います。その後、サブリストと同じ数のスレッドを作成し、それらのサブリストをsend()メソッドに渡します。各スレッドはsend()メソッドを呼び出します。しかし、すべてを終えたら、どうすればスレッドから抜け出し、ストアドプロシージャを1回だけ呼び出して更新することができますか(updateMessage()メソッド)?Webサービスを呼び出すためだけにスレッドを使用し、同時にスレッドからDbを呼び出す方法でこれを行うにはどうすればよいですか?