import UIKit
// 끝에 async 를 붙인다.
func performHeavyTask() async {
// Run some heavy tasks here...
print("하하하하하")
await Task.sleep(2_000_000_000)
print("기다림")
}
func performThrowingHeavyTask() async throws -> String {
// Run some heavy tasks here...
return ""
}
func waitTwoSeconds() async -> String {
// Run some heavy tasks here...
await Task.sleep(2_000_000_000)
return "222"
}
func waitThreeSeconds() async -> String {
// Run some heavy tasks here...
await Task.sleep(3_000_000_000)
return "333"
}
//// Task는 단일 비동기 처리 블럭
//Task {
// await performHeavyTask()
// let saying1 = await waitTwoSeconds()
// let saying2 = await waitThreeSeconds()
//}
func performTaskA() async -> Int {
// Wait for 2 seconds
await Task.sleep(2 * 1_000_000_000)
return 2
}
func performTaskB() async -> Int {
// Wait for 3 seconds
await Task.sleep(3 * 1_000_000_000)
return 3
}
func performTaskC() async -> Int {
// Wait for 3 seconds
await Task.sleep(4 * 1_000_000_000)
return 4
}
// 순서대로
func doSomethingSequence() {
// 순서대로 진행됨
Task {
// 1번 끝나고
let a = await performTaskA()
// 2번 끝나고
let b = await performTaskB()
let sum = a + b
print(sum) // Output: 5
}
}
// 동시 진행
func doSomethingParalle() {
// 동시 진행
Task {
// async let 을 하면 안기다림
async let a = performTaskA()
// async let 을 하면 안기다림
async let b = performTaskB()
async let c = performTaskC()
// await 로 async let 두놈이 끝날때 까지 기다림
// let sum = await(a + b)
let results : [Int] = await [ a, b, c ]
// print(sum) // Output: 5
}
}
//doSomethingSequence()
//doSomethingParalle()
// 동시 진행
Task {
// async let 을 하면 안기다림
async let a = performTaskA()
// async let 을 하면 안기다림
async let b = performTaskB()
async let c = performTaskC()
// await 로 async let 두놈이 끝날때 까지 기다림
// let sum = await(a + b)
let results : [Int] = await [ a, b, c ]
// print(sum) // Output: 5
}
//doSomething()
// actor는 클래스와 비슷
// 하나의 태스크는 하나의 액터 상태?
// 액터의 메소드는 async가 자동으로 묻는다?
actor Counter {
private let name: String
private var count = 0
init(name: String) {
self.name = name
}
func addCount() {
count += 1
}
func getName() -> String {
return name
}
}
let counter = Counter(name: "My Counter")
Task{
await counter.addCount()
}
Created
March 11, 2022 16:33
-
-
Save TuenTuenna/15ca2594c17c930b7f4b1e3fca771da9 to your computer and use it in GitHub Desktop.
AsyncAwaitTutorialTest file
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment