首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PingException发生mscorlib.dll

PingException发生mscorlib.dll
EN

Stack Overflow用户
提问于 2015-08-13 06:32:20
回答 1查看 368关注 0票数 1

我正在尝试从.csv文件中读取ip地址,并使用PingAsync类对这些地址进行ping。但我在下面一行中超越了异常。

代码语言:javascript
复制
await Task.WhenAll(pingTasks);

下面是我的完整代码,请看一看。

平法

代码语言:javascript
复制
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;
    }

    }

主要方法:

代码语言:javascript
复制
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();
}

如果我做错了什么,请指导我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-13 06:49:43

这段代码就是问题所在:

代码语言:javascript
复制
var pingTasks = ipaddress.Select(ip =>
{
    using (var ping = new Ping())
    {
        return ping.SendPingAsync(ip);
    }
}).ToList();

Ping操作有机会完成之前,您正在处理async类,因为您不是在等待SendPingAsync,而是简单地返回它生成的热任务。这导致在操作完成之前进行处置。

将代码更改为:

代码语言:javascript
复制
var pingTasks = ipaddress.Select(ip =>
{
    var ping = new Ping();
    return ping.SendPingAsync(ip);
}).ToList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31981044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档