18得票1回答
如何使用@MainActor初始化全局变量?

我希望有一种使用@MainActor同步的全局变量。 以下是一个示例结构体: @MainActor struct Foo {} 我希望有一个全局变量,类似于这样: let foo = Foo() 然而,这段代码无法编译并报错: Call to main actor-isolate...

16得票3回答
如何正确取消 Swift 的 async/await 函数

我观看了在Swift中探索结构化并发视频以及其他相关的视频/文章/书籍(来自Sundell的Swift,Hacking with Swift,Ray Renderlich),但那里的所有示例都非常琐碎 - 异步函数通常只有一个异步调用。在实际代码中应该如何处理? 例如:... ...

15得票1回答
转换不可发送的函数值可能会引入数据竞争。

我有一个简单的代码片段: struct ContentView: View { var body: some View { Text("Hello world!") .task { await myAsyncFu...

13得票1回答
"@MainActor in"和"MainActor.run"之间有什么区别吗?"

这两种方式有什么区别吗: Task { await MainActor.run { ... } } 和 Task { @MainActor in ... }

10得票1回答
使用自定义错误类型创建Swift 5.5并发任务

我需要在我创建的任务中使用自定义错误枚举: enum MyError: Error { case someError } var myTask: Task<MyModel, MyError> = Task { () throws -> MyModel in ...

10得票1回答
Swift 5.5并发编程: 如何序列化异步任务以替换最大并发操作数为1的OperationQueue?

我目前正在将我的应用程序迁移到使用Swift中的并发模型。我希望序列化任务以确保它们一个接一个地执行(没有并行)。在我的用例中,我想要监听由NotificationCenter发布的通知,并在发布新通知时执行任务。但我想确保没有先前的任务正在运行。这相当于使用maxConcurrentOper...

9得票2回答
在 Swift 5.5 中使用 async/await 实现循环函数

我希望在函数完成后继续每隔5秒触发一次该函数。 以前,我会在函数末尾使用以下代码: Timer.scheduledTimer(withTimeInterval: 5, repeats: false) { self.function() } 但是我想使用 Swift 5.5 的 asyn...

9得票1回答
我能使用Swift中的actors,在主线程上始终调用一个函数吗?

我最近看到Swift在Swift 5.5中引入了Actor模型的并发支持。该模型使得安全并发代码成为可能,避免了当我们有共享的可变状态时出现数据竞争。 我想避免我的应用程序UI中的主线程数据竞争。为此,我在设置UIImageView.image属性或UIButton样式的任何调用站点处包装D...

9得票1回答
使用withThrowingTaskGroup-在'try'表达式中没有调用可抛出函数

问题: 我有以下函数,它显示警告信息在'try'表达式内没有调用抛出异常的函数 为什么会出现这个警告?(任务中的代码引发了错误) 我该如何将错误传播到f1的调用方? 代码: func f1() async throws { try await withThrowingTas...

9得票2回答
如何将DispatchQueue的防抖动函数转换为Swift Concurrency任务?

我有一个现有的防抖实用程序,使用DispatchQueue。它接受一个闭包并在达到时间阈值之前执行它。可以像这样使用: let limiter = Debouncer(limit: 5) var value = "" func sendToServer() { limiter.ex...