Dispatch / DispatchQueue
Dispatchとは?急送、送り出す、派遣する、だそうです。なるほど処理させるという感じですね
Dispatch | Apple Developer Documentation
Execute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.
Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.
@Published変数はバックグラウンドスレッズで更新できません!
publish valuesは必須。と
つまりはメインスレッドでということでした。
DispatchQueue.global().async { // 重い処理をバックグラウンドスレッドで実行 let result = performHeavyTask() // メインスレッドで値を更新 DispatchQueue.main.async { self.somePublishedProperty = result } }
DispatchQueue.global() バックグラウンド
DispatchQueue.main メインスレッド
ということですね
yourPublisher .receive(on: DispatchQueue.main) // メインスレッドで値を受け取る .sink { value in self.somePublishedProperty = value } .store(in: &cancellables)
yourPublisher は @Publishedを内包するインスタンスや
combineフレームワークで作成したパブリッシャーもあると
Swift Concurrency
Task { let result = await performHeavyTask() await MainActor.run { self.somePublishedProperty = result } }
Task内では await MainActor.runとメインスレッドで実行するそう
Task iOS13..0以降
Task | Apple Developer Documentation
A unit of asynchronous work.
Task: 非同期処理を簡単に記述できる仕組み。
キャンセル対応: 必要に応じてTask.checkCancellation()を活用。
Task actor: 共有状態の安全な管理。
TaskGroup: 複数タスクを効率的に処理。
@MainActor: UI関連のコードを安全にメインスレッドで実行。
目新しいワードが続々と出てきて^^;
コメント