Interesting, thanks for this information. I didn't consider how SE-0338 would change things, but knowing that with…Continuation
needs special handling to preserve its semantics makes things clearer.
Let me expand on your post to verify my understanding:
Among other things, SE-0338 prescribes:
non-actor-isolated async functions never formally run on any actor's executor
I.e. if an actor calls a non-actor-isolated async func, the runtime must switch executors immediately. The executor hop may (not must) suspend the current task, e.g. if the target executor is busy.
There is a special exception for await with*Continuation
(implemented via @_unsafeInheritExecutor
, I think) that opts out of the new SE-0338 semantics and continues to execute these functions on the calling executor.
Correct?