- 다시 메인 스레드
{DispatchQueue.main.async // 인쇄 ( "여기에 메인 스레드입니다") }
- 지연 실행
마감일 = DispatchTime.now 송출 () + 5.0 DispatchQueue.global () asyncAfter. (마감일 : 마감일) { // 인쇄 ( "여기 연기 할") }
- 비동기 스레드를 엽니 다
{DispatchQueue.main.async의 인쇄 ( "실행의 새로운 비동기 스레드를 열고") }
- 스레드 동기화를 열고
DispatchQueue.global (). 동기화 { }
- 스레드 우선 순위
큐 VAR : DispatchQueue DispatchQueue.global = ()가 // //DispatchQueue.GlobalQueuePriority 선택이있다 4 높은`default`, 낮은, 배경. 대기열 = DispatchQueue.global (우선 순위 : DispatchQueue.GlobalQueuePriority.background) 배경 // // 비동기 작업 실행 큐 queue.async { // 인쇄 ( "새 스레드 실행을 열고") }
- 패킷 실행
그룹 = DispatchGroup는하자가 () 대기열 = DispatchQueue.global (우선 순위 : DispatchQueue.GlobalQueuePriority.default가) // 기본 우선 순위를 수행 0 I에 대한 .. <10 { // 비동기 작업 실행 큐 queue.async (그룹 : 그룹, 실행 { 인쇄 ( "queue.async은 (그룹 : 그룹 \ (나는)") }) } // 실행 후 패킷 큐가 완료 : {(큐 큐) group.notify 인쇄 ( "dispatch_group_notify을") }
- 직렬 큐 : 하나의 스레드 만이 순차적으로 순차적 실행에 추가하여 큐의 동작에 추가된다.
serialQueue = DispatchQueue 송출 (레이블 : "yangj", 속성 : []) I 0에서 .. <10 { // 비동기 작업 실행 큐 serialQueue.async { 인쇄 ( "serialQueue.async \ (I)") } }
- 동시 큐 : 작업 우선 순위에 고급 유지하면서 여러 스레드가 있습니다, 그것은 가능한 프로세서 큐에서 이러한 조치의 수술 후 올 것이다.
globalQueue = DispatchQueue.global 송출 (우선 순위 : DispatchQueue.GlobalQueuePriority.default) I 0에서 .. <10 { // 비동기 작업 실행 큐 globalQueue.async { 인쇄 ( "globalQueue.async \ (I)") } }
- 신호기
// DispatchSemaphore 신호 크기가 1이기 때문에, 당신은 단지 하나를 수행 할 수 송출 세마포어 DispatchSemaphore = (값 : 1) 송출 = DispatchQueue.global 큐 () queue.async { semaphore.wait () 송출 마감일 = DispatchTime.now () 3.0 + DispatchQueue.global () asyncAfter. (마감일 : 마감일) { 인쇄 ( ". ----------------- 1"); semaphore.signal () } } queue.async { semaphore.wait () 송출의 DispatchTime.now 마감일 = () + 10.0 DispatchQueue.global () asyncAfter. (마감일 : 마감일) { } 인쇄 ( "2 -----------------" ); semaphore.signal () } queue.async { semaphore.wait () 하게 마감 = DispatchTime.now () + 2.0 DispatchQueue.global () asyncAfter. (마감 : 마감) { 인쇄 ( "-------------- ---삼"); semaphore.signal () } }
-
dispatch_group_enter에서 OC 사용
// 설정 한 일정 만들 송출 workingGroup DispatchGroup = ()를 여러 열 생성 // workingQueue = DispatchQueue하자 (레이블 : "들은 request_queue을") // 비동기 네트워크 요청을 모방 @는 등록 workingGroup.enter () workingQueue.async { 스레드를. SLEEP이 (forTimeInterval :. 1) 인쇄 ( "포트 데이터 요청이 완료") // 착수 workingGroup.leave을 () } // 비동기 네트워크 요청 B의 모방 @는 등록 workingGroup.enter () workingQueue.async { 에 Thread.sleep (forTimeInterval :. 1) 인쇄 ( "포트 B의 데이터 요청 완료") // 착수 workingGroup.leave () } 인쇄 ( "나는 대부분의 인쇄 실행에 비동기 작업 후에 시작입니다") 을 마친 그룹의 작업을 예약 // workingGroup.notify (대기열 : workingQueue) { 인쇄 ( "A와 인터페이스를 B 인터페이스 데이터 요청!) "2 데이터 인터페이스를 병합하기 시작 완료된 }