Непрерывное выполнение метода - C#
Формулировка задачи:
Есть метод, который считывает данные с определенных юрлов. Но данные по этим адресам постоянно меняются, чтобы отследить изменения, надо по завершении выполнения данного метода, запускать его повторно, т.е. метод должен работать не прерывно. Как сделать, чтобы он работал не прерывно? Код ниже
P.S.Также параллельно надо проверять, что сервер пингуется. Если пингуется, то только после это проверять юрлы
private static void http() { var uris = new[] { new Uri( "http://" + "10.xx.24.xxx" + "/cgi/status.txt"), new Uri( "http://" + "10.xx.100.xxx" + "/cgi/status.txt"), }; IEnumerable<IAsyncResult> asyncResults = uris .Select(uri => (HttpWebRequest)WebRequest.Create(uri)) .Select(webRequest => webRequest.BeginGetResponse(null, webRequest)); Console.WriteLine("Ожидаем завершения запросов."); WaitHandle[] handles = asyncResults.Select(asyncResult => asyncResult.AsyncWaitHandle).ToArray(); WaitHandle.WaitAll(handles); Console.WriteLine("Получаем данные."); ParallelQuery<HTTPData> result = asyncResults .AsParallel() .WithDegreeOfParallelism(handles.Length) .AsUnordered() .Select(asyncResult => { HTTPData httpData = new HTTPData(); var httpWebRequest = (HttpWebRequest)asyncResult.AsyncState; HttpWebResponse response; try { response = (HttpWebResponse)httpWebRequest.EndGetResponse(asyncResult); } catch (Exception e) { httpData.host = httpWebRequest.Address.Host; httpData.result = e.Message; return httpData; } Stream responseStream = response.GetResponseStream(); if (responseStream == null) { httpData.host = httpWebRequest.Address.Host; httpData.result = "responseStream not available"; return httpData; } using (var reader = new StreamReader(responseStream)) { httpData.host = httpWebRequest.Address.Host; httpData.result = reader.ReadToEnd(); return httpData; } }); result.ForAll(s => { Console.WriteLine("Host:" + s.host + "\n" + s.result ); Console.WriteLine("----------------------------"); }); }
Почему то, если даже просто второй раз его вызвать, на второй итерации программа ни чего не делает, выводит только один результат по одному юрлу, второй теряется и больше ни чего не происходит. Программа просто работает, без вывода результатов
Решение задачи: «Непрерывное выполнение метода»
textual
Листинг программы
void PingAndRun() { var limiter = new AutoResetEvent(false); var pinger = new Ping(); pinger.PingCompleted += (s, a) => { if (!a.Cancelled && a.Reply.Status == IPStatus.Success) { limiter.Set(); } }; while (true) { pinger.SendPingAsync("ya.ru"); if (limiter.WaitOne(3000)) { http(); } else { pinger.SendAsyncCancel(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д