私は非常に単純なSwift SPMで作成されたプロジェクトを使用しており、Alamofireが含まれています。
main.Swift:
import Alamofire
Alamofire.request("https://google.com").responseString(queue: queue) { response in
print("\(response.result.isSuccess)")
}
ロックを使用しないと、クロージャは実行されません。終了する前にすべてのスレッドまたはその特定のスレッドを待つように指示する方法はありますか?
これはPlaygroundsを使用して簡単に実現できることを私は知っています。
非同期タスクを待つ最も簡単な方法は、セマフォを使用することです。
let semaphore = DispatchSemaphore(value: 0)
doSomethingAsync {
semaphore.signal()
}
semaphore.wait()
// your code will not get here until the async task completes
または、複数のタスクを待機している場合は、ディスパッチグループを使用できます。
let group = DispatchGroup()
group.enter()
doAsyncTask1 {
group.leave()
}
group.enter()
doAsyncTask2 {
group.leave()
}
group.wait()
// You won't get here until all your tasks are done
Swift 3
let group = DispatchGroup()
group.enter()
DispatchQueue.global(qos: .userInitiated).async {
// Do work asyncly and call group.leave() after you are done
group.leave()
}
group.notify(queue: .main, execute: {
// This will be called when block ends
})
このコードは、タスクの実行後にコードを実行する必要がある場合に役立ちます。
あなたの質問についての詳細を追加してください、そうすれば私はあなたをもっと助けることができます。