首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift并发中“任务”与“演员”的关系是什么?

Swift并发中“任务”与“演员”的关系是什么?
EN

Stack Overflow用户
提问于 2022-07-18 05:24:05
回答 2查看 216关注 0票数 3

我们都知道:Task.init创建了一个运行在当前参与者上的非结构化任务,Task.detached创建了一个不属于当前参与者的非结构化任务。

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

Task确实有机会不演任何演员,对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-27 09:00:30

除了在使用Task.initTask.detached创建的任务中是否继承参与者上下文方面存在差异外,还有其他不同之处:

用创建的

  1. 任务继承父任务的TaskLocal值。使用Task.detached创建的
  2. 任务不继承任务优先级。优先级应该手动提供,或者默认使用中等优先级。

如果任务与任何参与者没有关联,则由并发执行器/并发池执行。因此,是的,任务可能并不总是与参与者相关联。

票数 1
EN

Stack Overflow用户

发布于 2022-07-26 08:43:12

Task.init和Task.detached有什么区别?

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

来自@TaskLocal的医生

代码语言:javascript
复制
@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 -分离的任务不继承父任务的优先级。您可以在TaskPriority调用.

中设置

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73017644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档