简而言之,我有两个主要问题:
1 - 是否有可能无限期地使用Send()
类中的Ping
方法?
2 - 这是否会导致计算机显着减速?
我正在制作一个程序,简而言之,建立对某个服务器的平均ping,并在ping(ms)超过平均值超过某一点时通知用户。 现在,为了实现这一点,我自然必须让程序永远ping服务器(直到程序关闭当然)。
如果我无法永远这样做,我只能想到一个不合理的大for
循环或while (true) {}
循环。
我只是担心这会对用户的计算机造成很大的压力。 这可以得到确认还是我太谨慎了?
答案 0 :(得分:2)
如果您想要超高效,请使用Async IO - 这样您的应用程序就可以重用现有线程而无需处理阻塞调用(从而不必要地消耗线程):
public async Task PingForeverAsync( IPAddress host )
{
Ping ping = new Ping();
while( true )
{
Task interval = Task.Delay( 5000 );
Task<PingReply> pingTask = ping.SendAsync( host, 5000 );
PingReply reply = await pingTask.ConfigureAwait(false);
// (Measure the reply time here and send out notification if necessary)
await interval.ConfigureAwait(false); // await the 5000ms interval delay
}
}