Avatar
Avatar
lovee
業務のコードなので全体は貼れないですが、ものすごい単純化したものならこんな感じです: @Observable @MainActor final class MyClass { var continuations: [String: CheckedContinuation<Void, Never>] func demo(id: String) async { await withCheckedContinuation { continuation in await continuations[id] = continuation } } } MyClass@MainActor がつくので、continuations がMain-Actor Isolatedになるから、withCheckeContinuation の中だとどうしても await が付くんですね… (edited)
var continuations も、 withCheckedContinuation に渡してるクロージャも、どちらも @MainActor なので isolation 違反ではないです。 以下のように書いたらいけました。 @MainActor final class MyClass { init() {} var continuations: [String: CheckedContinuation<Void, Never>] = [:] func demo(id: String) async { await withCheckedContinuation { (continuation) in self.continuations.merge([id: continuation]) { $1 } } } }
4:57 AM
self.continuations[id] = と、subscript access を左辺に持ってくると、ダメみたいです。バグなのか理由があるのかはわからないです。