do { } while (0)
. Это и хорошо и плохо. Если поток нужен лишь раз, то смысла в таком очевидно нету. Все потоки по умолчанию такие. Там RunLoop выключен, а значит после работы они умирают. Но иногда нужно держать некий пулл потоков. Это означает держать потоки, которые готовы выполнить новую работу. Задайте вопрос, что лучше, создавать в таком случае каждый раз поток? или держать созданный в спящем режиме, что бы вернуть его для новой работы? Ответ очевидно: Лучше держать поток в спящем режиме. Тут дело в том, что создаётся поток не так быстро, как выводится текущий из спящего. Это делается в целях производительности. Я же с помощью ожидания могу контролировать время ожидания ответа от сервера,- ЧТО? ))) Это умеет делать и сам
URLSession
.func asyncDeleteBlackList(then handler: (String) -> Void) {
let vkUrl = URL(string: "http://url.ru/test/deleteBlackList.php")
let device: String = "\(shared.nameDevice)"
let postString = """
v=5.80& \
lang=ru& \
https=1& \
device=\(device)& \
access_token=\(self.access_token)& \
owner_id=\(self.blackList[b].id)
"""
var request = URLRequest(url: vkUrl!)
request.httpBody = postString.data(using: String.Encoding.utf8);
request.httpMethod = "POST"
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
request.addValue(shared.userAgent, forHTTPHeaderField: "User-Agent")
request.addValue("300", forHTTPHeaderField: "content-Length")
request.addValue("1", forHTTPHeaderField: "X-Get-Processing-Time")
request.addValue("remixlang=0", forHTTPHeaderField: "Cookie")
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if let error = error {
self.handleClientError(error)
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else
{
self.handleServerError(response)
return
}
if let data = data,
let string = String(data: data, encoding: .utf8) {
handler(string)
}
}
task.resume()
}
print("Начали...")
asyncDeleteBlackList { string
print("Закончили: \(string)")
}
print("А вот тут мы никого не ждём...")