2015-08-13 3 views
1

Я пытаюсь прочитать ip-адрес от .csv файла и пинговать эти адреса, используя класс PingAsync. Но я получаю выше исключения в следующей строке.PingException произошло mscorlib.dll

await Task.WhenAll(pingTasks); 

мой полный код приведен ниже ниже, посмотрите.

Ping Метод

private static async Task AsyncPingTask(List<string> ipaddress) 
{ 
    try 
    { 
     Console.WriteLine("Ping Started"); 
     StringBuilder pingStringBuilder = new StringBuilder(); 


      var pingTasks = ipaddress.Select(ip => 
      { 
       using (var ping = new Ping()) 
       { 
        return ping.SendPingAsync(ip); 
       } 
      }).ToList(); 

      Console.WriteLine("Ping Completed"); 

      await Task.WhenAll(pingTasks); 


      foreach (var pingReply in pingTasks) 
      { 
       pingStringBuilder.Append(pingReply.Result.Address); 
       pingStringBuilder.Append("-->"); 
       pingStringBuilder.Append(pingReply.Result.Status); 
       pingStringBuilder.Append("-->"); 
       pingStringBuilder.Append(pingReply.Result.RoundtripTime.ToString()); 
       pingStringBuilder.AppendLine(); 
      } 
      Console.WriteLine(pingStringBuilder.ToString()); 
      pingStringBuilder.Clear();     

    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message.ToString()); 
     throw; 
    } 

    } 

Основной метод:

public static void Main() 
{ 
    List<string> address = new List<string>(); 
    Task t = Task.Run(() => 
    { 
     var reader = new StreamReader(File.OpenRead([email protected]"\address.csv")); 
     while (!reader.EndOfStream) 
     { 
      var lines = reader.ReadLine(); 
      var values = lines.Split(';'); 
      address.Add(values[0]); 
     }     
    }); 


    Console.WriteLine("List COunt is {0}",address.Count); 
    Stopwatch timeSpan=Stopwatch.StartNew(); 


    t.Wait();    


    AsyncPingTask(address).Wait(); 

    Console.WriteLine(timeSpan.ElapsedMilliseconds);       
    Console.ReadLine(); 
} 

Если я сделал какую-либо ошибку, пожалуйста, руководство меня.

+0

Что такое сообщение исключение? Вернее, сообщение innerexceptions – BobbyTables

+0

Пожалуйста, по крайней мере, прочитайте [документацию] (https://msdn.microsoft.com/en-us/library/hh193994 (v = vs.110) .aspx): «Исключение было выбрано во время отправка или получение сообщений ICMP. См. внутреннее исключение для конкретного исключения, которое было выбрано ». - так что «PingException» само по себе ничего нам не говорит. Вам нужно отлаживать это дальше самостоятельно. –

+0

Первое исключение исключения типа «System.Net.NetworkInformation.PingException» произошло в mscorlib.dll Дополнительная информация: Исключение произошло во время запроса Ping. –

ответ

0

Этот фрагмент кода проблема:

Вы расположени Ping класс перед async операция имеет шанс завершить, так как вы не ожидали на SendPingAsync, а просто возвращение горячей которую он производит. Это приводит к удалению до завершения операции.

Изменить код на:

var pingTasks = ipaddress.Select(ip => 
{ 
    var ping = new Ping(); 
    return ping.SendPingAsync(ip); 
}).ToList(); 
+0

Он отлично работает без чтения **. Csv file **. Я просто копировал все ip-адреса из созданного файла, но сам работает нормально. Почему это бросает ошибку при использовании **. Csv file **? –

+0

@SarathJasrin Даже если он работает нормально, у вас там есть состояние гонки. Какая ошибка выбрасывается? –

+0

Привет! @yuval itzchakov за ваш ответ! Я ошибся в этом файле. Один формат IP-адреса недействителен, что является причиной исключения. Я изменил формат, теперь он работает нормально. –

Смежные вопросы