I have this code to check if Server is available or not:
public static async Task<bool> PingServer()
{
    System.Net.NetworkInformation.Ping p1 = new System.Net.NetworkInformation.Ping();
    System.Net.NetworkInformation.PingReply PR = await p1.SendPingAsync("pc2");
    // check when the ping is not success
    if (PR.Status != System.Net.NetworkInformation.IPStatus.Success)
    {
        return false;
    }
    return true;
}
Now, my problem is that SendPingAsync does not support CancellationTokenSource so how can I cancel the last ping to perform a new one to prevent a lot of pings?
When the server is lost it takes seconds to  PingServer() return a false value.
This is how I call PingServer():
var task = await PingServer();
if (task == true)
{
  //do some stuff like retrieve a table data from SQL server.
}
Why I use ping? because when I want to get a table from SQL server if the server is disconnected my app enter a breakpoint.
public  async  static Task<System.Data.Linq.Table<Equipment>> GetEquipmentTable()
{  
   try
    {
        DataClassesDataContext dc = new DataClassesDataContext();
        // note : i tried so many ways to get table synchronize but it still freeze my UI ! 
        return await Task.Run(() => dc.GetTable<Equipment>());               
    }
    catch
    {
        return null;
    }
}
EDIT : I used ping to reduce chance of entering my app in brake mode by getting a table from database. is there any other way to prevent break mode ? is it best way to ping server before calling dc.GetTable() ?

 
     
     
    