带@MainActor修饰的Task中,异步block()的运行优先级是多少?
Task标记@MainActor时异步block的运行优先级解析
针对你给出的代码片段,核心结论是:await block()的运行优先级会遵循你创建Task时指定的自定义priority,而非主队列默认的.userInteractive QoS,具体细节拆解如下:
- 同步代码
doStuffOnMainQueue():因为是在@MainActor上下文同步执行,直接占用主线程,所以确实会以主队列默认的.userInteractive优先级运行。 - 异步代码
await block():- 若
block()本身没有显式指定Actor或优先级,它会继承当前Task的自定义优先级。Swift中,显式指定的Task优先级会覆盖Actor默认的QoS调度优先级,主Actor也不例外。你可以在block()内部通过打印Task.currentPriority来验证,结果会等于你传入的priority参数。 - 若
block()内部标记了其他Actor、显式设置了优先级,那么会以block()自身的优先级配置为准。
- 若
简单来说:@MainActor仅确保代码在主线程执行,但Task显式指定的优先级会主导异步操作的调度排序逻辑。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

