问题标签 [swift-concurrency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
278 浏览

swift - Swift 任务未按预期在主要参与者上运行

我在一个简单的 Mac 测试项目中有以下代码:

Swift 语言指南中,我看到以下内容:

要创建在当前参与者上运行的非结构化任务,请调用 Task.init(priority:operation:) 初始化程序。要创建不属于当前参与者的非结构化任务,更具体地称为分离任务,请调用 Task.detached(priority:operation:) 类方法。

因此,由于 AppDelegate 代码在主角上运行并且我正在创建一个普通(即非分离)任务,我希望它的子任务也可以在主角上运行。

但这不是我运行这个测试应用程序时发生的情况:

根据我对 Swift 并发的了解,我预计新任务将在主要参与者上安排并运行,Thread.isMainThread因此在该任务中是正确的。

为什么不是这样?

0 投票
1 回答
107 浏览

ios - withThrowingTaskGroup - 'try' 表达式中不调用抛出函数

问题:

我有以下显示警告的功能No calls to throwing functions occur within 'try' expression

问题:

  • 为什么显示此警告?(任务里面的代码会报错)
  • 我应该怎么做才能将错误传播给调用者f1

代码:

0 投票
1 回答
175 浏览

swift - 将 async/await (Swift 5.5) 与 firebase 实时数据库一起使用

我使用 firebase 的实时数据库从我的应用程序中进行异步数据库查询。现在 iOS 15 为我们提供了 Swift 5.5,我喜欢使用async/await来执行这些查询,而不是传递完成闭包。

我知道我可以使用await withCheckedThrowingContinuation { }现有的 firebase 函数构建异步版本。但是异步版本已经存在了吗?是在firebase中还是由Xcode自动合成?

0 投票
0 回答
29 浏览

swift - Swift 跨参与者引用和可发送类型

在此处针对 Swift 语言的 Actor 模型的提案文件中,不允许跨 Actor 调用返回非可发送类型的函数。

但是,我尝试了论文中的示例,它可以编译和运行,而它假设会发出错误。

我的斯威夫特版本

我在上面的代码中做错了吗?如果我做得对,为什么实施不符合提案文件?

谢谢。

0 投票
1 回答
254 浏览

swift - 转换不可发送的函数值可能会引入数据竞争

我有一段简单的代码:

这编译得很好。但是,如果我用这个替换任务:

它不起作用,并给我以下错误:

将不可发送函数值转换为“@Sendable () async -> Void”可能会引入数据竞争

为什么会这样,我该如何解决?

0 投票
0 回答
43 浏览

ios - 顺序调用并发函数

概述

  • 我有一个f1非异步函数。
  • f1被多次调用,我无法控制调用f1
  • 当 f1 被调用时,我想调用一个异步函数f2

目标:

  • 我想f2在下一次f2执行之前完成

问题:

  • 如何确保f2按顺序执行?(下面的示例代码)
0 投票
1 回答
285 浏览

swiftui - SwiftUI 的任务修饰符示例代码比较混乱

这是苹果开发者文档中的代码。</p>

为什么不在messageUI 线程中更新如下代码

任务块中的代码是否总是在 UI 线程中运行?

这是我的测试代码。有时似乎任务没有继承其调用者的参与者上下文。

任务中的线程前后不同wait()

任务中的线程不是Main thread

0 投票
0 回答
808 浏览

swift - 在同步非隔离上下文中调用主要参与者隔离实例方法 XXX

我正在尝试向 UIButton 添加异步执行/捕获/延迟操作。但是,如果我只是在 defer 块中调用一个方法,就会Call to main actor-isolated instance method XXX in a synchronous nonisolated context出错。我找到的解决方法是将其包装在另一个Task块中,如下所示。只是想检查这是否是正确的方法?如果有人可以解释该错误消息的实际含义,那就太好了。

0 投票
1 回答
165 浏览

swift - 从无任务上下文同步访问参与者属性

与现有代码集成actors似乎并不像 Apple 希望你相信的那么简单。考虑以下简单的演员:

尝试从任何AppKit/UIKit(无任务)控制器访问此属性是行不通的,因为每个控制器Task都是异步的。

这会给你预期的错误Mutation of captured var 'v' in concurrently-executing code,如果你试图锁定它也不起作用。nonisolated演员方法也无济于事,因为你会遇到同样的问题。

那么如何在无任务上下文中同步读取参与者属性呢?

0 投票
0 回答
49 浏览

swift - MainActor vs MainActor(不安全)

我们可以创建一个@MainActor Task这样的:

但也有@MainActor(unsafe)这样的:

这两种方法有什么区别?