gpt4 book ai didi

swift - Swift并发中 'Task'和 'Actor'有什么关系

转载 作者:行者123 更新时间:2023-12-05 03:21:15 31 4
gpt4 key购买 nike

众所周知:Task.init 创建一个运行在当前 actor 上的非结构化任务,Task.detached 创建一个不属于当前 actor 的非结构化任务.

当创建新的非结构化任务的上下文是在主要参与者或任何其他参与者上时,我理解这些差异,但它是在串行执行器(即参与者)之外的并发执行器上呢?在这种情况下,Task.initTask.detached 有什么区别?

Task 确实有机会不在任何 actor 上运行,对吗?

最佳答案

what's the difference between Task.init and Task.detached?

  1. Task.detached - 分离任务不继承任务本地值

来自@TaskLocal的文档

@TaskLocal
static var traceID: TraceID?

print("traceID: \(traceID)") // traceID: nil

$traceID.withValue(1234) { // bind the value
print("traceID: \(traceID)") // traceID: 1234
call() // traceID: 1234

Task { // unstructured tasks do inherit task locals by copying
call() // traceID: 1234
}

Task.detached { // detached tasks do not inherit task-local values
call() // traceID: nil
}
}

func call() {
print("traceID: \(traceID)") // 1234
}
  1. Task.detached - 分离任务不继承父任务的优先级。您可以在 Task.detached 调用中设置 TaskPriority

关于swift - Swift并发中 'Task'和 'Actor'有什么关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73017644/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com