PingException occurred mscorlib.dll

本文关键字:dll mscorlib occurred PingException | 更新日期: 2023-09-27 18:07:33

我正试图从.csv文件读取ip地址,并使用PingAsync类ping这些地址。但是我在下一行中得到了上述异常。

await Task.WhenAll(pingTasks);

我的完整代码如下,请看看。

<<p> 平方法/strong>
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(Environment.CurrentDirectory+@"'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();
}

PingException occurred mscorlib.dll

这段代码就是问题所在:

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

您在async操作有机会完成之前处理了Ping类,因为您没有等待SendPingAsync,而只是返回它产生的热任务。这将导致在操作完成之前进行处置。

把你的代码改成:

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