Following up here, since I promised I'd check -- none of our current executors, including dispatch, would execute the block immediately/synchronously; So while we do not enforce it in any way today, one can rely on the lack of running those blocks immediately.
Task.immediate (and friends) being a notable exception here, but that doesn't even get passed to an executor, unless a suspension or hop happens, so it's a separate semantic really, that is unique to that API.