按时间限制Dns.GetHostAddresses
Limit Dns.GetHostAddresses by time
我正在编写一个脚本,使用 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 我想 return "No IP"
我怎样才能做到这一点?
您可以通过使用 TPL(任务并行库)来实现。您可以创建新任务并等待 1 秒,如果成功则 return 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#
问题是我有很多域无法解析为 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 我想 return "No IP"
我怎样才能做到这一点?
您可以通过使用 TPL(任务并行库)来实现。您可以创建新任务并等待 1 秒,如果成功则 return 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";
}
}