问题标签 [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 投票
2 回答
244 浏览

swift - Swiftui async / await 与 Firebase

我正在尝试从数据库中获取最后一个 AppVersion 文档!

我在这里做错了什么?

0 投票
1 回答
1807 浏览

swift - 斯威夫特,演员:演员隔离属性“扫描”不能从非隔离上下文中变异

我有一个演员:

我有一个使用该演员的对象:

线:

myStates.job1IsActive = true

出现此错误的错误:

Actor-isolated property 'job1IsActive' can not be mutated from a non-isolated context

如何使用演员正确存储/读取状态信息,以便 MyObj 可以使用它来读取和设置状态?

0 投票
1 回答
954 浏览

swift - 如何使用@MainActor 初始化全局变量?

我想要某种使用同步的全局变量@MainActor

这是一个示例结构:

我想要一个像这样的全局变量:

但是,这不会编译并与Call to main actor-isolated initializer 'init()' in a synchronous nonisolated context.

很公平。我试图在主线程上构建它,如下所示:

这编译!但是,它会崩溃EXC_BAD_INSTRUCTION,因为DispatchQueue.main.sync无法在主线程上运行。

我还尝试创建一个包装函数,例如:

并使用

但是编译器无法识别if Thread.isMainThread并再次抛出相同的错误消息,Call to main actor-isolated initializer 'init()' in a synchronous nonisolated context.

这样做的正确方法是什么?我需要某种可以在应用程序启动之前初始化的全局变量。

0 投票
1 回答
75 浏览

ios - 如何在 Xcode 13 中调用具有异步重载的原始同步方法

最近切换到 Xcode 13。

我有一个 AVAsset 作家,并试图调用该方法

它现在有一个异步版本,以及同步版本。

我想调用原始同步版本,但收到错误消息:

如何调用原始同步/Xcode 13 之前的版本?

0 投票
1 回答
76 浏览

swift - Swift 并发:`async let` 在模拟器上的奇怪行为

我运行以下代码片段并期望loadFromNetworkloadFromDB并行运行。

但我看到了这一点,loadFromNetworkloadFromDB在同一个后台线程上依次运行。为什么会这样?

更新

我发现这只发生在模拟器上。我在 iPhone 13 Pro Max 和 iPhone 12 Prod Max 上进行了测试。在我的 iPhone 7 设备上一切正常。我已经更新了标题。

0 投票
1 回答
86 浏览

swift - 可以将 Swift 并发任务存储在队列中并稍后启动吗?

我需要推迟一个任务的执行,直到我完成一个高优先级的任务,例如重新认证,然后从那里执行原始任务。我正在尝试为此使用 Swift Concurrency 的Task对象:

我看到我可以cancel完成任务,但我想稍后停止/启动它。我正在考虑将其存储在队列中,并在高优先级任务完成后将队列刷新。这可以用 Swift Concurrency 来完成,还是我希望我不必用 async/await 或类似的东西来包装Operation对象?

0 投票
2 回答
2218 浏览

swift - 在某些情况下,当从任务运行时,快速异步函数正在主线程上运行

在这种情况下,异步函数读取文件并返回解析的内容。

在我看来,我想从主线程中加载内容,然后在完成后更新视图。

我在各个地方都使用过这种模式,并注意到在某些情况下异步调用在主线程上(通过调试),而在其他情况下它在Thread 4 Queue : com.apple.root.user-initiated-qos.cooperative (concurrent)线程上

例如:

我使用类似的模式创建了几个不同的视图(.task块调用async函数)

在某些情况下,函数长时间运行(从磁盘读取)并且发生在主线程上

0 投票
2 回答
294 浏览

swift - 如何将 DispatchQueue debounce 转换为 Swift 并发任务?

我有一个使用DispatchQueue. 它接受一个闭包并在达到时间阈值之前执行它。它可以这样使用:

请注意,它不是Fire!多次调用,而是在最后一次使用最后一个任务的值后 5 秒。该Debouncer实例被配置为将队列中的最后一个任务保持 5 秒,无论它被调用多少次。闭包被传递到execute(block:)方法中:

如何将其转换为并发操作,以便可以如下调用:

但是,这不会取消任务,而是暂停它们直到下一个被调用。相反,它应该取消前一个任务并保持当前任务直到去抖动时间。这可以用Swift Concurrency完成还是有更好的方法来做到这一点?

0 投票
1 回答
498 浏览

swift - Swift:如何将“完成”包装到异步/等待中?

我有一个基于回调的 API。

我想在该 API 之上编写一个 async/await 包装器,将实现推迟到基于原始回调的 API。

显然,这段代码没有连接——它不是真实的,fulfillTask.

问题:有没有办法在 Swift 中使用非结构化并发来帮助我实现这一目标?

0 投票
0 回答
209 浏览

swift - Actor 'self' 只能从异步初始化器中传递 'inout'

在 Swift 中,假设我们有一个 actor,它有一个私有结构。
我们希望这个 actor 具有响应性,并允许发布者访问发布私有结构的特定字段的发布者。

以下代码似乎有效。但它会产生一个我不明白的警告。

警告:

这意味着什么?是否有可能摆脱这个警告?它是否“危险”(这会在以后引起问题)吗?

注意
如果我使用$myStruct而不是_myStruct.projectedValue,它根本不会编译。我认为这是相关的,但我不知道如何。

在这种情况下,错误是: