44得票5回答
Swift await/async - 如何同步等待异步任务完成?

我正在用Swift桥接同步/异步世界,并进行渐进式采用异步/等待。我正在尝试从非异步函数调用返回值的异步函数。我理解明确使用Task是这样做的方式,例如在这里所述。 示例并不真正适合,因为该任务没有返回值。 经过多番搜索,我仍然找不到任何描述我认为是相当常见的请求:同步调用异步任务(是的,我明...

34得票6回答
调用异步函数时,`Task` 会阻塞主线程。

我有一个 ObservableObject 类和一个 SwiftUI 视图。当点击按钮时,我创建了一个 Task 并在其中调用 populate(一个异步函数)。我认为这会在后台线程上执行 populate,但实际上整个 UI 都会冻结。这是我的代码:class ViewModel: Obse...

34得票2回答
Swift,actor:演员隔离属性“扫描”无法从非隔离上下文中改变。

我有一个演员:actor StatesActor { var job1sActive:Bool = false ... } 我有一个使用那个演员的对象:class MyObj { let myStates = StatesActor() ...

33得票3回答
如何防止演员重入导致重复请求?

在 WWDC 2021 视频中,使用 Swift actors 保护可变状态,他们提供了以下代码片段:actor ImageDownloader { private var cache: [URL: Image] = [:] func image(from url: URL)...

32得票2回答
async/await, Task and [weak self]

好的,我们都知道在传统的Swift并发中,如果你在类内执行(例如)网络请求,并在该请求的完成处理中引用该类所属的函数,则必须传入 [weak self] ,如下所示: Okay,因为我们都知道,在Swift传统的并发编程中,如果你在一个类中执行(例如)网络请求,在请求完成后,如果要引用该类中...

28得票1回答
在同步非隔离的上下文中调用主演员隔离实例方法XXX。

我正在尝试将异步 do/catch/defer 操作添加到 UIButton 上。然而,如果我只是在 defer 块中调用一个方法,我会收到“在同步非隔离上下文中调用主要角色隔离实例方法 XXX”的错误。我发现的解决方法是将其包装在另一个 Task 块中,如下所示。只想确认这是否是正确的方法?...

24得票2回答
如何使用async/await在Swift 5.5中等待x秒

如何使用新的Swift 5.5 await关键字等待一段时间?通常,使用完成处理程序时,您可以通过使用DispatchQueue的asyncAfter(deadline:execute:)来实现以下内容:func someLongTask(completion: @escaping (Int)...

23得票1回答
如何访问一个被Actor隔离的属性

我尝试检查演员的行为。这是Swift5.5提供的新功能。我已经创建了一个游乐场,并使用官方文档swift.org中的示例代码。 import Foundation actor TemperatureLogger { let label: String ...

21得票1回答
使用async-await任务组的最大线程数

我的目的是了解 Swift 5.5 的 async-await 所使用的“协作式线程池”,以及任务组如何自动约束并发度:考虑以下任务组代码,同时进行 32 次计算: func launchTasks() async { await withTaskGroup(of: Void.sel...

19得票1回答
如何在Swift并发中限制并发性(例如`maxConcurrentOperationCount`)?

我正在尝试执行一系列网络请求,并希望在新的 Swift 并发系统中限制并行任务的数量。在操作队列中,我们会使用maxConcurrentOperationCount。在 Combine 中,使用flatMap(maxPublishers:_:)。在新的 Swift 并发系统中有什么等效的方法?...