Я использую Простой Ping API для проверки связи с множеством хостов. Мой класс 'PingLatencyCalculator' - это простая оболочка для SimplePing, которая вычисляет задержку, а также время ожидания после 1 секунды для каждого запроса.
let domains = ["www.amazon.com", "www.microsoft.com", "www.yahoo.com", "www.violanation.com", "www.stackoverflow.com", "www.docs.google.com", "www.microsoft.com", "www.google.com", "www.espn.in", "www.dsDSadasdsad.com"]
let latencyCalculator = PingLatencyCalculator()
for domain in domains {
latencyCalculator.pingHost(hostname: domain) { (latency) in
if let unwrappedlatency = latency {
DispatchQueue.main.async {
print("\(domain) - Your latency is \(String(describing: unwrappedlatency)))")
}
} else {
print("\(domain) could not be reached...")
}
}
}
Все работает отлично. Единственная проблема заключается в том, что Apple SimplePing API построен на C-библиотеках, и кажется, что их обратные вызовы не будут работать с GCD, поэтому он должен выполняться в главном потоке. это в основной ветке? Если я запускаю это в фоновом потоке, обратные вызовы не вызываются.
Так, каковы мои другие варианты пинговать хосты одновременно в фоновом режиме? Любые предложения будут оценены.