Правильна ли идея алгоритма и как ее правильно реализовать? - C#
Формулировка задачи:
Правильна ли идея алгоритма и как ее правильно реализовать, чтобы программа не зависала и мониторинг работал в своем отдельном потоке и не влиял на программу, но передавал ей результаты. (программа считывает из инфо класса)
Есть информационный класс Сервер собирающий содержащий информацию о доступности сервера по ping, http и BD
В зависимости от количества серверов (например два) одновременно запускаются потоки для опроса каждого сервера действующие по следующему алгоритму
1. Проверяем доступность по ping, если доступен запускаем 2, если нет, в инфо класс пишем соответствующую инфу, выходим.
2. Если по ping доступен запускаем сразу не зависимо друг от друга асинхронно методы проверки по http и BD. Если по http не доступен делаем 3 попытки, чтобы убедиться что действительно не доступен записываем результаты в инфо класс.
3. Ждем завершения потоков, смотрим инфо класс и состояния серверов, обрабатываем данные, после чего запускаем опять опрос и так бесконечно.
Решение задачи: «Правильна ли идея алгоритма и как ее правильно реализовать?»
textual
Листинг программы
Thread test1 = new Thread(S1);
Thread test2 = new Thread(S2);
test1.Start();
test2.Start();
.......
static void test_monitoring(Server server)
{
throw new NotImplementedException();
}
static void S1()
{
TestMonitoring test = new TestMonitoring();
Server server = new Server();
server.IP = "10.xx.24.xxx";
server.URL = "http://" + "10.xx.24.xxx" + "/cgi/status.txt";
test.onMonitoringServer += new TestMonitoring.TestMonitoring(test_monitoring);
test.PingAndRun(server);
}
static void S2()
{
TestMonitoring test2 = new TestMonitoring();
Server server2 = new Server();
server2.IP = "10.xx.100.xxx";
server2.URL = "http://" + "10.xx.100.xxx" + "/cgi/status.txt";
test2.onMonitoringServer += new TestMonitoring.TestMonitoring(test_monitoring);
test2.PingAndRun(server2);
}