Быстрая отмена процесса отправкиQueue

3
задан rmaddy 17 January 2019 в 16:32
поделиться

2 ответа

Где не должно быть ни одного случая, когда UDPServer не вернется. Должен быть предел времени ожидания для того, как долго UDPServer должен ждать. Например, рассмотрим следующий случай:

 DispatchQueue.global(qos: .background).async {
 let server = UDPServer(address:"0.0.0.0", port:5005)
    switch server.recv(1024) {
        case .success:
            print("Server received message from client.")
        case .failure(let error):
            print("Server failed to received message from client: \(error)")
        }

        server.close()
        DispatchQueue.main.async {
            ...
        }
    }
0
ответ дан Rokon 17 January 2019 в 16:32
поделиться

Добавить таймер, который срабатывает после определенного интервала времени ожидания

Объявить константу для интервала времени ожидания и свойство для таймера

private let timeoutSeconds = 30
private var timer : DispatchSourceTimer?

и написать две функции для запуска и остановки таймер.

fileprivate func startDispatchTimer()
{
    let interval : DispatchTime = .now() + .seconds(timeoutSeconds)
    if timer == nil {
        timer = DispatchSource.makeTimerSource(queue: DispatchQueue.global())
        timer!.schedule(deadline:interval)
        timer!.setEventHandler {
            // do something when the timer fires
            self.timer = nil
        }
        timer!.resume()
    }
}

fileprivate func stopDispatchTimer()
{
    timer?.cancel()
    timer = nil
}

Запустите таймер после инициализации экземпляра сервера и остановите его в случае успеха. В случае неудачи добавьте код в закрытие setEventHandler для обработки тайм-аута, например, для освобождения экземпляра сервера.

0
ответ дан vadian 17 January 2019 в 16:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: