Concurrency (async/await, Task, Actor, ..)
async/await
-
TaskTaskはインスタンス化?されたらクロージャが即実行されるTaskのクロージャが戻り値を返す場合、.valueで受け取る。もちろんawaitつける
-
async/awaitasync→ 並行して実行されるメソッドの定義に書く。 computed property でも良いawait→asyncなメソッドを実行して待つ
swift
Task(priority: .background) {
let x = await func1() // 呼んだときに待つ場合
print(x)
async let x = func1() // 参照するときに待つ場合
print(await x)
}
...
func func1() async -> String {
// ...
return x
}
Actor- メソッドがデフォルトで synchronized となったクラスのようなもの、ということ?
- 呼ぶときは
awaitつけて呼ぶ - synchronized でなくて良いものは
nonisolatedをつける
Sendable- スレッドセーフであることを明示するということ?
final class Class01: Sendable { ...のように指定@unchecked
- Main Actor
- メインスレッドで走るコードのこと
- 方法1:
@MainActorで指定したメソッド - 方法2:
MainActor.run { ... }で呼んだブロック
この辺は、こういうのがあるという程度でメモ。
AsyncIteratorProtocol,AsyncSequence- 順番に実行したいとき用?
makeAsyncIterator()next()
- Task Group
withTaskGroup(of: Type, returning: Type, body: Closure) { group in ...group.addTask(priority: .background) { ...
- Asynchronous Image
AsyncImage