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 } } } }