c# - 按时间限制 Dns.GetHostAddresses

标签 c# system.net

我正在编写一个使用 C# 解析域 IP 地址的脚本

问题是我有很多域无法解析为 IP,因此代码 (Dns.GetHostAddresses) 运行了很长时间,试图解析域的 IP没有 IP。

这是代码:

public string getIPfromHost(string host)
{
    try
    {
        var domain = Dns.GetHostAddresses(host)[0];
        return domain.ToString();
    }
    catch (Exception)
    {
        return "No IP";
    }
}

我想做的是,如果 1 秒后没有 IP,我想返回“No IP”

我怎样才能做到这一点?

最佳答案

您可以通过使用 TPL(任务并行库)来实现这一点。您可以创建新任务并等待 1 秒,如果成功则返回 true,否则返回 false。 只需在 getIPfromHost(string host) 这个方法中使用下面的代码。 (这是您问题的解决方案,需要等待 1 秒,请确保您之前的方法工作正常。)

public string getIPfromHost(string host)
        {
            try
            {
                Task<string> task = Task<string>.Factory.StartNew(() =>
                {
                     var domain = Dns.GetHostAddresses(host)[0];
                     return domain.ToString();
                });

            bool success = task.Wait(1000);
            if (success)
            {
                return task.Result;
            }
            else
            {
                return "No IP";
            }

            }
            catch (Exception)
            {

                return "No IP";
            }

        }

关于c# - 按时间限制 Dns.GetHostAddresses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41348873/

相关文章:

c# - 色键去除算法/库

c# - 如何在代码优先中设置身份种子值?

c# - 为什么在 VB.NET 中可以将 Nothing 赋值给 Integer?

c# - 使用 C# 通过 HTTP POST 发送文件

c# - 将 HttpResponseMessage 的内容转换为对象

c# - linq 另一个列表的有序子集

c# - 从数据库中获取记录

c# - 消息为 "The request was aborted: The request was canceled."的 WebException 的根本原因是什么

.net - EnsureSuccessStatusCode 的使用以及它抛出的 HttpRequestException 的处理

c# - 跟踪 Azure Functions 中的传出请求