В моем консольном приложении у меня есть несколько потоков, и каждый поток имеет бесконечный l oop с Thread.Sleep. Имейте много потоков, потому что каждый из них не зависит от других. Каждый цикл запускается каждые waitingTime
раз, и я хочу, чтобы он никогда не останавливался.
static int waitingTime= 5 * 60 * 1000;
static void Main(string[] args)
{
Thread thread1 = new Thread(() => Thread1());
Thread thread2 = new Thread(() => Thread2());
Thread thread3 = new Thread(() => Thread3());
...
thread1.Start();
thread2.Start();
thread3.Start();
...
}
static void Thread1()
{
do
{
// Connect to DB and do something...
try
{
using (SqlConnection connection = MyDBClass.MyDBConnection())
{
connection.Open();
SqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT x, y FROM Table WITH (NOLOCK);";
SqlDataReader sdr = command.ExecuteReader();
while (sdr.Read())
{
MyObject obj = new MyObject(sdr[0] as string, ...);
MyStaticClass.SetMyObject(obj); // Open a new DB connection on different server and do an Update.
}
sdr.Close();
sdr.Dispose();
}
}
catch
{
}
Thread.Sleep(waitingTime);
}
while (true);
}
static void Thread2()
{
do
{
// Connect to DB and do something...
Thread.Sleep(waitingTime);
}
while (true);
}
...
Я читал, что использовать Thread.Sleep () в таких случаях не рекомендуется, и он предлагает использовать такие решения, как EventWaitHandle . Какое решение для этого случая лучше всего и как его реализовать.